Func和lambda问题

时间:2010-11-16 02:31:13

标签: c# .net

我有

的声明
void Test (Func<bool> f)

我有像bool getItem(string id)

这样的方法

我可以像Test ( ()=>getItem("123"))一样打电话,为什么?

我想我可以检查我需要1个字符串参数。

3 个答案:

答案 0 :(得分:4)

因为Test的签名要求参数是一个不带参数的方法并返回一个布尔值。

答案 1 :(得分:4)

Func<bool>需要一个返回bool的函数。 Func<T1>有一个输出参数,然后Func<T1, T2>采用输入T1和输出T2的函数。每个连续版本都允许一个额外的输入参数,最终的泛型类型是输出参数的类型。

例如:Func<string, string, bool>可以调用bool DoStuff(string s1, string s2)

快速编辑以澄清:测试(()=&gt; getItem(“123”))是有效的,因为lambda声明的开头没有公开输入参数,而getItem返回一个布尔值。

答案 2 :(得分:1)

您的方法测试被定义​​为采用Func<bool>的参数,该参数需要类似于bool Something();的方法签名

查看其他Func<>选项,了解您要完成的匹配项。至少您正在查看Action<string>Func<bool, string>