Obtenir le type d'une MemberInfo avec réflexion
Je suis à l'aide de la réflexion pour charger un treeview avec la structure de classe d'un projet. Chacun des membres dans une classe ont un attribut personnalisé affecté.
Je n'ai pas de problème à obtenir les attributs d'une classe à l'aide de MemberInfo.GetCustomAttributes()
cependant j'ai besoin d'une méthode de travail si un membre de la classe est une classe personnalisée, puis les besoins de l'analyse elle-même pour retourner les attributs personnalisés.
Jusqu'à présent, mon code est:
MemberInfo[] membersInfo = typeof(Project).GetProperties();
foreach (MemberInfo memberInfo in membersInfo)
{
foreach (object attribute in memberInfo.GetCustomAttributes(true))
{
//Get the custom attribute of the class and store on the treeview
if (attribute is ReportAttribute)
{
if (((ReportAttribute)attribute).FriendlyName.Length > 0)
{
treeItem.Items.Add(new TreeViewItem() { Header = ((ReportAttribute)attribute).FriendlyName });
}
}
//PROBLEM HERE : I need to work out if the object is a specific type
// and then use reflection to get the structure and attributes.
}
}
Est-il un moyen facile d'obtenir le type de cible d'un MemberInfo instance afin que je puisse gérer de manière appropriée? Je sens que je suis absent quelque chose d'évident, mais je vais en rond à la minute.
OriginalL'auteur GrandMasterFlush | 2013-04-10
Vous devez vous connecter pour publier un commentaire.
GetProperties
retourne un tableau dePropertyInfo
de sorte que vous devriez l'utiliser.Ensuite, c'est simplement une question de l'utilisation de la
PropertyType
propriété.MemberInfo[] membersInfo =
est un mauvais signe. L'une des raisons pour lesquelles je préfèrevar
- moins de choses à se tromper.Fantastique, merci Daniel.
OriginalL'auteur Daniel Hilgarth
Je pense que vous pouvez obtenir de meilleures performances si vous portez autour de cette méthode d'extension:
Devrait fonctionner pour tout
MemberInfo
, pas seulementPropertyInfo
. Vous pouvez éviterMethodInfo
à partir de cette liste puisque ce n'est pas sous le couché de type soi (mais le type de retour).Dans votre cas:
Je me demande pourquoi cela n'a pas été une partie de la BCL par défaut.
PropertyInfo
.OriginalL'auteur nawfal