messagebox.show中的Lambda匿名方法

时间:2014-12-28 19:22:26

标签: c# winforms lambda

我只是在玩匿名方法,我想知道为什么这段代码不能编译。 Messagebox show需要一个字符串,我试图将它返回一个字符串。

            MessageBox.Show(() => 
            {
                if (button1.Text == "button1")
                {
                   return "ok";
                }
                else
                {
                   return "not button1 text";
                }
            });

无法将lambda表达式转换为字符串类型,因为它不是委托类型。

有人可以解释原因吗?我错过了演员吗?

1 个答案:

答案 0 :(得分:8)

您的代码正在做的是定义一个返回字符串(Func)的Func<string>。然后你尝试将Func<string>传递给MessageBox.Show作为参数。请注意,MessageBox.Show不接受Func<string>类型,它接受string,因此您无法以这种方式将lamda表达式传递给它。但你可以这样做:

Func<string> yourFunc = () => 
            {
                if (button1.Text == "button1")
                {
                   return "ok";
                }
                else
                {
                   return "not button1 text";
                }
            };

MessageBox.Show(yourFunc());