2008-11-10 15 views
5

tuve el siguiente fragmento de línea de código que busca en un hotel fenomenal de una instancia por su nombre:¿Cómo uso la reflexión .Net para buscar una propiedad por nombre ignorando el caso?

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

Ahora quiero pasar por alto el caso de fieldName, así que trataron los siguientes:

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

... Sin dados. Ahora prop no encontrará nombres de campo que tengan el caso exacto.

Por lo tanto ..... ¿Cómo uso la reflexión .Net para buscar una propiedad por nombre ignorando el caso?

Respuesta

13

es necesario especificar BindingFlags.Public | BindingFlags.Instance así:.

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); 
    } 
} 

(Cuando no se especifica ningún banderas, público, instancia y estática son proporcionados por defecto Si especifica explícitamente Te sugiero solamente especificar uno de instancia o estática, si usted sabe lo que necesita)

2

Trate de añadir los BindingFlags alcance de esta manera:.

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

Esto funciona para mí.

Cuestiones relacionadas