I am writing a Windows 8 application in C# and XAML. I have a class with many properties of the same type that are set in the constructor the same way. Instead of writing an
Try this:
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();
}
and use it like this:
var props = obj.GetType().GetTypeInfo().GetAllProperties();
Update: Use this extension method only if GetRuntimeProperties
is not available because GetRuntimeProperties
does the same but is a built-in method.
You need to use GetRuntimeProperties instead of 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));
}