2008-11-10 5 views
5

J'ai eu l'extrait de ligne de code suivante qui recherche un propery d'une instance par nom:Comment utiliser la réflexion .Net pour rechercher une propriété par nom en ignorant la casse?

var prop = Backend.GetType().GetProperty(fieldName); 

Maintenant, je veux ignorer le cas de fieldName, j'ai donc essayé les éléments suivants:

var prop = Backend.GetType().GetProperty(fieldName, BindingFlags.IgnoreCase); 

... Pas de dés. Maintenant, prop ne trouvera pas les noms de champs qui ont le cas exact.

Par conséquent ... Comment utiliser la réflexion .Net pour rechercher une propriété en ignorant son nom?

Répondre

13

Vous devez spécifier BindingFlags.Public | BindingFlags.Instance ainsi:.

using System; 
using System.Reflection; 

public class Test 
{ 
    private int foo; 

    public int Foo { get { return foo; } } 

    static void Main() 
    { 
     var prop = typeof(Test).GetProperty("foo", 
              BindingFlags.Public 
              | BindingFlags.Instance 
              | BindingFlags.IgnoreCase); 
     Console.WriteLine(prop); 
    } 
} 

(Lorsque vous ne spécifiez pas de drapeaux, public, par exemple et statique sont fournis par défaut Si vous spécifiez explicitement je vous suggère de ne spécifiez l'une instance ou statique, si vous savez ce que vous avez besoin)

2

Essayez d'ajouter le champ d'action BindingFlags comme ceci:.

var prop = Backend.GetType().GetProperty(fieldName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase); 

Cela fonctionne pour moi.

Questions connexes