Warum gibt es in C # keinen 'fieldof'- oder' methodof'-Operator? [geschlossen]
Sie könnten wie folgt verwendet werden:
FieldInfo field = fieldof(string.Empty);
MethodInfo method1 = methodof(int.ToString);
MethodInfo method2 = methodof(int.ToString(IFormatProvider));
fieldof
könnte nach IL kompiliert werden als:
ldtoken <field>
call FieldInfo.GetFieldFromHandle
methodof
könnte nach IL kompiliert werden als:
ldtoken <method>
call MethodBase.GetMethodFromHandle
Wann immer dietypeof
Wenn Sie den Operator verwenden, erhalten Sie perfekte Ergebnisse für die Suche nach allen Referenzen. Unglücklicherweise landen Sie, sobald Sie zu Feldern oder Methoden gehen, in fiesen Hacks. Ich denke, Sie könnten Folgendes tun ... oder Sie können zurückkehren, um ein Feld mit Namen zu erhalten.
public static FieldInfo fieldof<T>(Expression<Func<T>> expression)
{
MemberExpression body = (MemberExpression)expression.Body;
return (FieldInfo)body.Member;
}
public static MethodInfo methodof<T>(Expression<Func<T>> expression)
{
MethodCallExpression body = (MethodCallExpression)expression.Body;
return body.Method;
}
public static MethodInfo methodof(Expression<Action> expression)
{
MethodCallExpression body = (MethodCallExpression)expression.Body;
return body.Method;
}
public static void Test()
{
FieldInfo field = fieldof(() => string.Empty);
MethodInfo method1 = methodof(() => default(string).ToString());
MethodInfo method2 = methodof(() => default(string).ToString(default(IFormatProvider)));
MethodInfo method3 = methodof(() => default(List<int>).Add(default(int)));
}