it-swarm.com.de

BindingFlags.IgnoreCase funktioniert nicht für Type.GetProperty ()?

Stellen Sie sich Folgendes vor

Ein Typ T hat ein Feld Firma. Bei der Ausführung der folgenden Methode funktioniert es einwandfrei:

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

Mit dem folgenden Aufruf erhalte ich allerdings null

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

Hat jemand eine Idee?

158
Boris Callens

Sie haben die Standard-Lookup-Flags überschrieben. Wenn Sie neue Flags angeben, müssen Sie alle Informationen angeben, damit die Eigenschaft gefunden werden kann. Zum Beispiel: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

347
Pop Catalin

Sie müssen BindingFlags.Public | BindingFlags.Instance Hinzufügen

28
leppie

Danke, das hat mir heute sehr geholfen. Ich hatte Audit-Informationen gespeichert, aber mit falscher Schreibweise auf den Eigenschaftsnamen. (Die Überwachung ist in eine Datenebene integriert.) Also musste ich IgnoreCase als verbindliches Flag hinzufügen, aber dann hat es immer noch nicht funktioniert, bis mein Kollege diese Antwort gefunden hat. Die resultierende Funktion:

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

Dies ist Teil einer Klasse, die ich DotMagic nenne.

9