Wir haben Code, der einen Eigenschaftsnamen verwendet, verwendet Reflektion, um einen Comparer zu implementieren.Bei einem gegebenen Eigenschaftsnamen kann ich einen Delegaten erstellen, um seinen Wert zu erhalten
Ich möchte einen Delegierten/Func speichern, um den Wert zu erhalten, anstatt den Reflexionspreis jedes Mal zu zahlen, wenn wir einen Wert erhalten müssen.
eine Klasse wie folgt gegeben:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Ich habe versucht, eine Funktion zu schreiben, die einen Delegaten für mich
Func<T, object> CreateGetFuncFor<T>(string propertyName)
{
PropertyInfo prop = typeof(T).GetProperty(propertyName);
return (Func<T, object>)Delegate.CreateDelegate(typeof(Func<T, object>),
null,
prop.GetGetMethod());
}
Der folgende Code funktioniert gut für die immer den Namen schaffen würde
var person = new Person { Name = "Dave", Age = 42 };
var funcitonToGetName = CreateGetFuncFor<Person>("Name");
Console.WriteLine(funcitonToGetName(person));
var functionToGetAge = CreateGetFuncFor<Person>("Age");
, aber für den Altersfaktor gibt es eine ArgumentException mit der Meldung "Fehler beim Binden an targ et method "
Was fehlt mir? Gibt es einen anderen Weg, es zu tun?
Danke an beide Lukes! – Argos