2009-10-30 7 views
0

Cela pourrait couture comme une question étrange mais ....Comment obtenir le nom d'une propriété?

public string MyProperty 
{ 
    get 
    { 
     return "MyProperty"; 
    } 
} 

Comment puis-je remplacer l'instruction return aller elle renvoie le nom de la propriété sans qu'il soit codé en dur?

+0

Cela semble une question étrange. Quelle est l'utilisation prévue? –

+0

probablement pour le débogage afin qu'il puisse imprimer la méthode dans laquelle un événement se produit? –

Répondre

9

Je ne recommanderais pas faire cela en général, mais on y va:

return MethodBase.GetCurrentMethod().Name.Substring(4); 

L'utilisation d'un obfuscateur peut totalement vis comme ça, en passant.

+1

Eh bien, n'est-ce pas ce que sont les obfuscateurs? :-) – Joey

+0

Johannes: Probablement;) Mais vous ne voulez pas que votre code lance une 'IndexOutOfRangeException'. –

+0

merci :) cela a fonctionné parfaitement. Quelques explications supplémentaires sur les raisons pour lesquelles j'ai besoin de ceci: On m'a donné une application qui utilise environ 50 clés d'un fichier webconfig. Et ma tâche est de permettre à l'application de fonctionner avec n'importe quel nombre de clients (ayant besoin de répliquer ces 50 clés pour chaque nouveau client). J'ai donc déplacé les clés dans un fichier séparé et j'ai dû créer une classe qui encapsule l'accès aux données afin de pouvoir créer un tableau de clients. – Sergio

1

Si vous utilisez .NET, vous pouvez également utiliser LINQ pour identifier ceci:

public static string GetName<T>(Func<T> expr) 
{ 
    var il = expr.Method.GetMethodBody().GetILAsByteArray(); 
    return expr.Target.GetType().Module.ResolveField(BitConverter.ToInt32(il, 2)).Name; 
} 

Je ne peux pas demander un crédit pour cette solution - cela venait de here.

+0

dazzler ;-) +1 approche très intéressante, jamais entendu parler de ça –

Questions connexes