gpt4 book ai didi

c# - 我们可以修改此代码以返回方法的名称而不是属性吗?

转载 作者:行者123 更新时间:2023-12-02 15:45:26 24 4
gpt4 key购买 nike

寻找一种干净的方法来以类型安全的方式发现方法的字符串名称。

这是我所拥有的属性,但我无法弄清楚如何为方法执行此操作。

class Program
{
class Customer
{
public String Id { get; set; }
}

public static String GetPropertyName<T>(
Expression<Func<T, Object>> selector) where T : class
{
var expression = (MemberExpression)selector.Body;
return expression.Member.Name;
}

static void Main(string[] args)
{
String propertyName = GetPropertyName<Customer>(c => c.Id);
}
}

最佳答案

几乎可以更改为:

    var expression = (MethodCallExpression)selector.Body;
return expression.Method.Name;

有一个值得注意的异常(exception),您需要 Action<T>处理void的选项方法。当然,您必须提供虚拟参数值 - 如果您确实想要,您也可以获得这些值。

实际上,您的现有代码可能并不健壮;您可能需要放弃强制转换操作(将 int 装箱到对象)。

public static string GetMethodName<T>(Expression<Func<T, Object>> selector) where T : class
{
var expression = (MethodCallExpression)(selector.Body is UnaryExpression ? ((UnaryExpression)selector.Body).Operand : selector.Body);
return expression.Method.Name;
}
public static string GetMethodName<T>(Expression<Action<T>> selector) where T : class
{
var expression = (MethodCallExpression)(selector.Body is UnaryExpression ? ((UnaryExpression)selector.Body).Operand : selector.Body);
return expression.Method.Name;
}

关于c# - 我们可以修改此代码以返回方法的名称而不是属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5438701/

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