BindingFlags.IgnoreCase non funziona per Type.GetProperty ()?
-
06-07-2019 - |
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?
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.