Comment obtenir le PropertyInfo d'une propriété spécifique?
Je veux obtenir le PropertyInfo pour une propriété spécifique. Je pourrais utiliser:
foreach(PropertyInfo p in typeof(MyObject).GetProperties())
{
if ( p.Name == "MyProperty") { return p }
}
Mais il doit y avoir moyen de faire quelque chose de similaire à
typeof(MyProperty) as PropertyInfo
Est-il? Ou suis-je coincé faire un type dangereux de comparaison de chaîne?
Acclamations.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la nouvelle
nameof()
opérateur qui est une partie de C# 6 et disponibles dans Visual Studio 2015. Plus d'infos ici.Pour votre exemple, vous utilisez:
Le compilateur va convertir
nameof(MyObject.MyProperty)
à la chaîne "MyProperty" mais vous gagnez l'avantage d'être en mesure de refactoriser le nom de la propriété sans avoir à vous rappeler de changer la chaîne, car Visual Studio, ReSharper, et l'envie de savoir comment refactorisernameof()
valeurs.PropertyInfo result =
au lieu devar result =
.Il y a un .NET 3.5 façon avec les lambdas/
Expression
que ne pas utiliser de chaînes...Expression
PropertyHelper<Derived>.GetProperty(x => x.BaseProperty);
. Voir stackoverflow.com/questions/6658669/...Vous pouvez faire ceci:
Cependant, depuis C# n'est pas un "symbole" de type, il n'y a rien qui vous aideront à éviter l'aide de la chaîne. Pourquoi appelez-vous ce type dangereux, par le chemin?
Réflexion est utilisé pour l'exécution type d'évaluation. Si votre constantes de chaîne ne peut pas être vérifiée au moment de la compilation.