C#中的lambda表达式和Messagebox

Kek*_*Sha 5 c# linq lambda dynamic messagebox

private void SimpleLambda()
{
  dynamic showMessage =  x => MessageBox.Show(x);

  showMessage("Hello World!");
}
Run Code Online (Sandbox Code Playgroud)

错误消息是:无法将lambda表达式转换为动态类型,因为它不是委托类型

任何帮助,

Jon*_*eet 16

这与MessageBox- 无关- 如错误消息所示,您根本无法将lambda表达式转换为,dynamic因为编译器不知道创建实例的委托类型.

你要:

Action<string> action = x => MessageBox.Show(x);
Run Code Online (Sandbox Code Playgroud)

或者甚至使用方法组转换,尽管那时你必须匹配返回类型:

Func<string, DialogResult> func = MessageBox.Show;
Run Code Online (Sandbox Code Playgroud)

然后,您可以dynamic根据需要使用:

dynamic showMessage = action; // Or func
showMessage("Hello World!");
Run Code Online (Sandbox Code Playgroud)

或者,您可以在显式委托实例表达式中指定lambda表达式:

dynamic showMessage = new Action<string>(x => MessageBox.Show(x));
Run Code Online (Sandbox Code Playgroud)

  • +1因为Jon Skeet回答:) (5认同)
  • @Sangram - 你应该根据你是否相信答案是否有用而不是谁写的来投票,但这是一个很好的答案. (3认同)

spe*_*i43 5

private void SimpleLambda()
{
  Action<string> showMessage =  x => MessageBox.Show(x);

  showMessage("Hello World!");
}
Run Code Online (Sandbox Code Playgroud)