如何在 C# 中向 Lambda 函数添​​加属性?

How to add an Attribute to Lambda function in C#?

我在 C# 中有一个自定义属性:MyAttr。 我有一个方法需要委托作为参数。

我现在将 lambda 表达式传递给该方法:

SomeMethod((object o) => { DoSomething(); });

DoSomething() 方法使用 relection 获取有关调用方法(在本例中为 lambda 表达式)的信息。但是它找不到所需的信息,因为 lambda 表达式没有属性:-(

我想做的是以下其中一项:

// This does not work:
SomeMethod([MyAttr](object o) => { DoSomething(); });
// Thos does not work, too:
SomeMethod((object o) => [MyAttr] { DoSomething(); });

是否可以将属性放入 lambda 表达式?

不幸的是,这还不可能。您必须通过使用该属性创建 delegate 方法来实现 "old way"。正如 xanatos 指出的那样,这可能会出现在下一版本的 C# 中。

[MyAttr]
private void MyCallback(object o)
{
}

其实这个问题在这里已经有了答案: Custom attribute on parameter of an anonymous lambda