gpt4 book ai didi

c# - 如何从 Expression> 获取接口(interface)成员名称

转载 作者:行者123 更新时间:2023-11-30 15:32:34 24 4
gpt4 key购买 nike

我正在寻找一种方法来获取传递给 Client.SendMessage 的表达式的接口(interface)成员名称。下面是我尝试过的,但我得到了一个无效的转换异常。

public interface IFoo
{
void Operation1(object data);
void Operation2(object data);
}

public class FooClient<T>
{
public void SendMessage(Expression<Action<T>> expr)
{
// InvalidCastException:
// Cannot cast 'InstanceMethodCallExpressionN' to 'MemberExpression'
var iMemberName = ((MemberExpression)expr.Body).Member.Name;

Console.WriteLine(iMemberName);
}
}

class Program
{
static void Main()
{
var client = new FooClient<IFoo>();

// Should write 'Operation1'
client.SendMessage(x => x.Operation1("Hello, world!"));

// Should write 'Operation2'
client.SendMessage(x => x.Operation2("How are you?"));
}
}

最佳答案

因为内部表达式是 MethodCallExpression (而不是代表属性或字段访问表达式的 MemberExpression),您应该适本地转换它并获取 Method property 返回的 MethodInfo 对象的名称。 .

public class FooClient<T>
{
public void SendMessage(Expression<Action<T>> expr)
{
var iMemberName = ((MethodCallExpression)expr.Body).Method.Name;

Console.WriteLine(iMemberName);
}
}

关于c# - 如何从 Expression<Action<T>> 获取接口(interface)成员名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18857552/

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