关于泛型编程的c#语法帮助

时间:2010-12-21 01:28:45

标签: c#

 TEntity Single(Expression<Func<TEntity, bool>> predicate);

请解释参数。

2 个答案:

答案 0 :(得分:8)

所以,这里有很多内容,但让我们从内部开始:

Func<TEntity, bool>是一个接受输入的委托,该类型是通用的,所以我们只称它为TEntity。没有任何约束,这可以是任何东西,但是强类型的东西。

一个级别是Expression<Func<TEntity, bool>>。这是表达式树,它被强类型化为一个委托,它接受一个输入并返回一个bool。换句话说,它是表达函数的表达式树(回想你的编译器课程)。

最后,最外层:TEntity Single(Expression<Func<TEntity, bool>> predicate)是一个名为Single的方法,它以表达式的形式获取谓词函数。返回的内容与传递给该函数的类型相同。

基本上,Single将接受表达式,编译它并针对一组数据执行它,返回集合中与谓词表达式匹配的第一个实体。

希望这有帮助吗?

答案 1 :(得分:0)

这是一个expression,用于指定任何代理函数,它接受任何“TEntity”(在本例中由您调用它的集合中定义)并返回一个bool。实际上,委托是使用lambda函数指定的:

items.Single(i => i.Id == 1);

在您的示例中,Single函数是一个扩展方法,应用于TEntity的泛型集合(我认为没有任何限制 - 即必须只是对象)。因此,TEntity的类型是根据您调用它的集合推断的。