Как получить свойства класса в WinRT
Я пишу приложение Windows 8 в С# и XAML. У меня есть класс со многими свойствами того же типа, которые установлены в конструкторе одинаково. Вместо того, чтобы писать и назначать для каждого из свойств вручную, я хочу получить список всех свойств определенного типа в моем классе и установить их все в foreach.
В "нормальном".NET я бы написал это
var properties = this.GetType().GetProperties();
foreach (var property in properties)
{
if (property.PropertyType == typeof(Tuple<string,string>))
property.SetValue(this, j.GetTuple(property.Name));
}
где j
- параметр моего конструктора. В WinRT GetProperties()
не существует. Intellisense для this.GetType().
не показывает ничего полезного, которое я мог бы использовать.
Ответы
Ответ 1
Вам нужно использовать GetRuntimeProperties
вместо GetProperties
:
var properties = this.GetType().GetRuntimeProperties();
// or, if you want only the properties declared in this class:
// var properties = this.GetType().GetTypeInfo().DeclaredProperties;
foreach (var property in properties)
{
if (property.PropertyType == typeof(Tuple<string,string>))
property.SetValue(this, j.GetTuple(property.Name));
}
Ответ 2
Попробуйте следующее:
public static IEnumerable<PropertyInfo> GetAllProperties(this TypeInfo type)
{
var list = type.DeclaredProperties.ToList();
var subtype = type.BaseType;
if (subtype != null)
list.AddRange(subtype.GetTypeInfo().GetAllProperties());
return list.ToArray();
}
и используйте его следующим образом:
var props = obj.GetType().GetTypeInfo().GetAllProperties();
Обновление: Используйте этот метод расширения, только если GetRuntimeProperties
недоступен, потому что GetRuntimeProperties
делает то же самое, но является встроенным методом.