Ich frage mich, ob der folgende Code "sicher" ist. Mit "sicher" meine ich, dass ich nicht auf eine bestimmte Compiler-Version oder undokumentierte Funktion angewiesen bin. Ich möchte Zeichenfolge mit Eigenschaft/Feldname erhalten, aber ich möchte es mit starker Typisierung deklarieren (Ich möchte der Compiler überprüfen, ob ein bestimmtes Feld/Eigenschaft existiert). Meine Methode sieht wie folgt aus:Stark typisierte Eigenschaftsdeklarationen - ist dieser Code sicher?
string GetPropertyName<T>(Expression<Func<T, object>> expression)
{
if (expression.Body is UnaryExpression)
{
var operand = ((UnaryExpression)expression.Body).Operand.ToString();
return operand.Substring(operand.IndexOf(".") + 1);
}
else if (expression.Body is MemberExpression)
{
return ((MemberExpression)expression.Body).Member.Name;
}
else
{
throw new NotImplementedException();
}
}
Und hier ist, wie ich will, es benutzen:
class Foo
{
public string A { get; set; }
public Bar B { get; set; }
}
class Bar
{
public int C { get; set; }
public Baz D { get; set; }
}
class Baz
{
public int E { get; set; }
}
GetPropertyName<Foo>(x => x.A)
GetPropertyName<Foo>(x => x.B)
GetPropertyName<Foo>(x => x.B.C)
GetPropertyName<Foo>(foo => foo.B.D.E)
Vielen Dank im Voraus für die Hilfe.