我只是在玩匿名方法,我想知道为什么这段代码不能编译。 Messagebox show需要一个字符串,我试图将它返回一个字符串。
MessageBox.Show(() =>
{
if (button1.Text == "button1")
{
return "ok";
}
else
{
return "not button1 text";
}
});
无法将lambda表达式转换为字符串类型,因为它不是委托类型。
有人可以解释原因吗?我错过了演员吗?
答案 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());