ANG*_*von 5 c# lambda custom-attributes
我在C#中有一个自定义属性:MyAttr.我有一个方法,希望委托作为参数.
我现在将lambda表达式传递给该方法:
SomeMethod((object o) => { DoSomething(); });
Run Code Online (Sandbox Code Playgroud)
该DoSomething()方法使用relfection来获取有关调用方法的信息(在本例中为lambda表达式).但它无法找到所需的信息,因为lambda表达式没有属性:-(
我想要做的是以下之一:
// This does not work:
SomeMethod([MyAttr](object o) => { DoSomething(); });
// Thos does not work, too:
SomeMethod((object o) => [MyAttr] { DoSomething(); });
Run Code Online (Sandbox Code Playgroud)
是否有可能将属性放入lambda表达式?
不幸的是,这还不可能。您将不得不使用“旧方法”,通过创建delegate具有该属性的方法。然而,正如xanatos指出的那样,这可能会出现在 C# 的下一版本中。
[MyAttr]
private void MyCallback(object o)
{
}
Run Code Online (Sandbox Code Playgroud)
实际上,这个问题在这里已经有了答案: Custom attribute on parameter of anonymous lambda
从 C# 10 开始,这是可能的。
// This does work from C# 10:
var lambda = [MyAttr] (object o) => { DoSomething(); };
SomeMethod(lambda);
Run Code Online (Sandbox Code Playgroud)