如何在C#中向Lambda函数添加属性? [重复]

问题描述 投票:0回答:1

我在 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 表达式?

c# lambda custom-attributes
1个回答
5
投票

不幸的是,这还不可能。您必须使用“旧方法”,通过使用该属性创建

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);
© www.soinside.com 2019 - 2024. All rights reserved.