我在 C# 中有一个自定义属性:
MyAttr
。
我有一个需要委托作为参数的方法。
我现在将 lambda 表达式传递给该方法:
SomeMethod((object o) => { DoSomething(); });
该
DoSomething()
方法使用反射来获取有关调用方法的信息(在本例中为 lambda 表达式)。但它找不到所需的信息,因为 lambda 表达式没有属性:-(
我想做的是以下其中一项:
// This does not work:
SomeMethod([MyAttr](object o) => { DoSomething(); });
// Thos does not work, too:
SomeMethod((object o) => [MyAttr] { DoSomething(); });
是否可以将属性放入 lambda 表达式?
不幸的是,这还不可能。您必须使用“旧方法”,通过使用该属性创建
delegate
方法。然而,正如 xanatos 指出的那样,这可能会出现在 C# 的下一版本中。
[MyAttr]
private void MyCallback(object o)
{
}
其实这个问题已经有答案了: 匿名 lambda 参数的自定义属性
从 C# 10 开始,这是可能的。
// This does work from C# 10:
var lambda = [MyAttr] (object o) => { DoSomething(); };
SomeMethod(lambda);