gpt4 book ai didi

c# - 获取强类型方法的名称

转载 作者:可可西里 更新时间:2023-11-01 08:26:58 25 4
gpt4 key购买 nike

认为我有一个像下面这样的类:

public class Foo
{
public int Bar { get; set; }

public int Sum(int a, int b)
{
return a + b;
}

public int Square(int a)
{
return a * a;
}
}

所有你知道的,我可以写一个返回给定属性名称的方法:

var name = GetPropertyName<Foo>(f => f.Bar); //returns "Bar"

GetPropertyName 方法可以很容易地实现如下:

public static string GetPropertyName<T>(Expression<Func<T, object>> exp)
{
var body = exp.Body as MemberExpression;
if (body == null)
{
var ubody = (UnaryExpression)exp.Body;
body = ubody.Operand as MemberExpression;
}
return body.Member.Name;
}

但我想像下面这样轻松地获取方法名称和属性名称:

var name1 = GetMethodName<Foo>(f => f.Sum); //expected to return "Sum"
var name2 = GetMethodName<Foo>(f => f.Square); //expected to return "Square"

是否可以编写这样的 GetMethodName 方法?

注意:GetMethodName 必须独立于给定方法的签名或返回值。

最佳答案

经过一些研究,我发现 Expression<Action<T>>应该足以做你想做的事。

private string GetMethodName<T>(Expression<Action<T>> method)
{
return ((MethodCallExpression)method.Body).Method.Name;
}

public void TestMethod()
{
Foo foo = new Foo();
Console.WriteLine(GetMethodName<Foo>(x => foo.Square(1)));
Console.WriteLine(GetMethodName<Foo>(x => foo.Sum(1,1)));
Console.ReadLine();
}

public class Foo
{
public int Bar { get; set; }

public int Sum(int a, int b)
{
return a + b;
}

public int Square(int a)
{
return a * a;
}
}

Output

关于c# - 获取强类型方法的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18800240/

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