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

Antworten auf die Frage(5)

Ihre Antwort auf die Frage