2008-11-05 13 views
110

Wyobraź sobie następująceBindingFlags.IgnoreCase nie działa dla Type.GetProperty()?

Typ T ma pole Firma. Podczas wykonywania następujący sposób działa idealnie:

Type t = typeof(T); 
t.GetProperty("Company") 

Whith poniższej rozmowy dostaję zerowy chociaż

Type t = typeof(T); 
t.GetProperty("company", BindingFlags.IgnoreCase) 

Ktoś ma pomysł?

+0

Podczas gdy twoje pytanie jest poprawne, dlaczego chcesz zignorować obudowę w Reflection? – OregonGhost

+9

@OregonGhost: Czy to ma znaczenie? – leppie

+6

Podczas gdy twoje pytanie jest poprawne, tak naprawdę nie ma to znaczenia. Jak większość moich pytań, moim głównym powodem jest głód wiedzy;) –

Odpowiedz

256

pan nadpisane domyślne flagi look-up, jeśli podasz nowych flag musisz dostarczyć wszystkich informacji tak, że nieruchomość można znaleźć. Na przykład: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

+2

ktokolwiek ma pojęcie, dlaczego tak jest (pytanie o wiedzę;)) – Shrivallabh

9

Trzeba dodać BindingFlags.Public | BindingFlags.Instance

4

Dzięki, to naprawdę pomogło mi dzisiaj w szczyptę. Miałem zapisane informacje kontroli, ale z nieprawidłową obudową na nazwach właściwości. (Inspekcja jest wbudowana w datalayer.) W każdym razie musiałem dodać IgnoreCase jako flagę wiążącą, ale wtedy to nie zadziałało, dopóki mój współpracownik nie znalazł odpowiedzi. Wynikowa funkcja:

public static void SetProperty(Object R, string propertyName, object value) 
{ 
    Type type = R.GetType(); 
    object result; 
    result = type.InvokeMember(
     propertyName, 
     BindingFlags.SetProperty | 
     BindingFlags.IgnoreCase | 
     BindingFlags.Public | 
     BindingFlags.Instance, 
     null, 
     R, 
     new object[] { value }); 
} 

Jest to część klasy, którą nazywam DotMagic.

Powiązane problemy