Domanda

Immagina quanto segue

Un tipo T ha un campo Azienda. Quando si esegue il seguente metodo funziona perfettamente:

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

Con la seguente chiamata ottengo null comunque

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

Qualcuno ha avuto un'idea?

È stato utile?

Soluzione

Hai sovrascritto i flag di ricerca predefiniti, se specifichi nuovi flag devi fornire tutte le informazioni per poter trovare la proprietà. Ad esempio: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

Altri suggerimenti

Devi aggiungere BindingFlags.Public | BindingFlags.Instance

Grazie, questo mi ha davvero aiutato in un pizzico oggi. Avevo salvato le informazioni di controllo, ma con un involucro errato sui nomi delle proprietà. (Il controllo è integrato in un datalayer.) Comunque ho dovuto aggiungere IgnoreCase come flag di associazione, ma poi non ha funzionato, fino a quando il mio collega non ha trovato questa risposta. La funzione risultante:

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

Fa parte di una classe che chiamo DotMagic.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top