我正在查看包含以下内容的代码:
public virtual ICollection<T> GetPk(string pk)
{
Expression<Func<T, bool>> predicate = c => c.PartitionKey == pk;
return this.GetAll(predicate);
}
有人可以解释<Func<T, bool>>
的语法吗?
答案 0 :(得分:3)
最好的解释之一可以在MSDN
找到您可以使用此委托来表示可以作为参数传递的方法,而无需显式声明自定义委托。封装的方法必须对应于此委托定义的方法签名。这意味着封装的方法必须有一个按值传递给它的参数,并且它必须返回一个值。
对于您的示例中的参数,T是输入参数的类型,bool是已解决方法的返回类型。
答案 1 :(得分:3)
Func<T, bool>
表示一个函数,它接受T
类型的对象并返回bool
。它通常被称为“谓词”,用于验证对象的条件。
Expression<Func<T, bool>>
表示函数的abstract syntax tree,即其句法结构。它可以用于分析函数的代码以用于各种目的,例如将其转换为SQL以对数据库执行。
答案 2 :(得分:3)
简单Func<T, bool>
是匿名方法签名。第一种类型T
是输入参数类型,第二种类型是返回类型。当您考虑您的表示时,这更像是一种方法:
bool AnonMethod(T arg0)
{
return arg0.PartitionKey == pk;
}
答案 3 :(得分:1)
我总是觉得MSDN首先值得检查一下,
http://msdn.microsoft.com/en-us/library/bb549151.aspx
被Maheep击败,没有看到帖子消息弹出。
基本上,您要声明一个匹配签名的方法,然后可以将该方法传入调用以获取数据。
答案 4 :(得分:1)
最初令人困惑但Func<T, bool>
描述了一个返回bool并接受类型为T的参数的函数。
在这种情况下,T是一个具有PartitionKey
属性的对象,这个GetPk
方法正在使用Func<T, bool>
来匹配实例对象中具有{的所有T项。 {1}}匹配字符串PartitionKey
。
答案 5 :(得分:1)
对于某些背景;在Func<T, TResult>
(以及该系列的其余部分)成为框架的一部分之前,您必须显式定义委托或使用匿名方法。
Func
和Action
被添加为语言中添加lambda表达式的一部分。它们是lambda表达式键入的框架定义的委托,但您作为开发人员也可以使用它来代替您自己的自定义委托定义。
你可以在这里获得一段美好的历史;
http://blogs.msdn.com/b/ericwhite/archive/2006/10/03/lambda-expressions.aspx
答案 6 :(得分:0)
这是附加的syntax,因此您知道该函数有哪些内容。
Func<T, bool>
的意思是:
函数具有 1个输入 T
和 1个输出,即bool
。