有人可以解释<func <t,bool =“”>&gt;以一种简单的方式为我</func <t,>

时间:2011-12-15 11:12:34

标签: c#

我正在查看包含以下内容的代码:

public virtual ICollection<T> GetPk(string pk)
{
    Expression<Func<T, bool>> predicate = c => c.PartitionKey == pk;
    return this.GetAll(predicate);
}

有人可以解释<Func<T, bool>>的语法吗?

7 个答案:

答案 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>(以及该系列的其余部分)成为框架的一部分之前,您必须显式定义委托或使用匿名方法。

FuncAction被添加为语言中添加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

This is other variations of the function