Comment obtenir les propriétés d’une classe dans WinRT

J’écris une application Windows 8 en C # et XAML. J’ai une classe avec beaucoup de propriétés du même type qui sont définies dans le constructeur de la même manière. Au lieu d’écrire et d’assigner manuellement chacune des propriétés, je souhaite obtenir une liste de toutes les propriétés d’un certain type de ma classe et les définir toutes dans un foreach.

En “normal” .NET j’écrirais ceci

var properties = this.GetType().GetProperties(); foreach (var property in properties) { if (property.PropertyType == typeof(Tuple)) property.SetValue(this, j.GetTuple(property.Name)); } 

j est un paramètre de mon constructeur. Dans WinRT, GetProperties() n’existe pas. Intellisense pour this.GetType(). ne montre rien d’utile que je pourrais utiliser.

Vous devez utiliser GetRuntimeProperties au lieu de 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)) property.SetValue(this, j.GetTuple(property.Name)); } 

Essaye ça:

 public static IEnumerable GetAllProperties(this TypeInfo type) { var list = type.DeclaredProperties.ToList(); var subtype = type.BaseType; if (subtype != null) list.AddRange(subtype.GetTypeInfo().GetAllProperties()); return list.ToArray(); } 

et l’utiliser comme ça:

 var props = obj.GetType().GetTypeInfo().GetAllProperties(); 

Mise à jour: Utilisez cette méthode d’extension uniquement si GetRuntimeProperties n’est pas disponible car GetRuntimeProperties procède de la même manière mais constitue une méthode intégrée.