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?
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
Sie müssen BindingFlags.Public | BindingFlags.Instance
Hinzufügen
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.