Почему в C # нет оператора `fieldof` или` methodof`? [закрыто]

Их можно использовать следующим образом:

FieldInfo field = fieldof(string.Empty);
MethodInfo method1 = methodof(int.ToString);
MethodInfo method2 = methodof(int.ToString(IFormatProvider));

fieldof может быть скомпилировано в IL как:

ldtoken <field>
call FieldInfo.GetFieldFromHandle

methodof может быть скомпилировано в IL как:

ldtoken <method>
call MethodBase.GetMethodFromHandle

Всякий раз, когдаtypeof оператор, вы получите идеальный результат поиска всех ссылок. К сожалению, как только вы переходите к полям или методам, вы получаете неприятные хаки. Я думаю, что вы могли бы сделать следующее ... или вы можете вернуться к получению поля по имени.

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

Ответы на вопрос(5)

Ваш ответ на вопрос