新Action有什么问题(()=> someCombobox.Text =“x”)

时间:2012-01-25 12:19:36

标签: c# lambda

当我写下我的代码时

Action(() => someCombobox.Text = "x" )

我收到此错误:

  

委托'System.Action<object>'不接受0参数

为什么呢?

此问题与this one有关。我只是想了解为什么会出现这种错误。

3 个答案:

答案 0 :(得分:8)

您不必将其作为构造函数参数传递:

 Action a = () => someCombobox.Text = "x";

您所要做的就是声明一个动作,然后使用lambda表达式来创建它。

或者,您可以将字符串传递给操作:

  Action<string> a = (s) => someCombobox.Text = s;
  a("your string here");

答案 1 :(得分:5)

如果您希望创建一个没有参数且未返回值的System.Action委托,只需将您的代码更改为此,删除new Action([body])

Action newAction = () => someCombobox.Text = "x";

这是因为lambda表达式将为您返回一个新的无参数System.Action委托。编辑:如Aliostad所述,() => someCombobox.Text = "x"将返回lambda表达式或Action,具体取决于您为其指定的变量的类型。

编辑:正如Darin所说,如果你希望它接受一个参数,那么你需要在创建lambda表达式时传递它。

答案 2 :(得分:0)

我认为这里的答案与您链接到的相关问题中的答案相同:.NET 2.0只有一个带有参数的Action委托的定义。

无参数的Action委托在.NET 3.5中添加,需要引用System.Core。