gpt4 book ai didi

c# - 为什么 C# 中没有 `fieldof` 或 `methodof` 运算符?

转载 作者:IT王子 更新时间:2023-10-29 03:54:49 25 4
gpt4 key购买 nike

<分区>

它们可以按如下方式使用:

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com