c#语法帮助,关于泛型编程 TEntity-Single(表达式谓词);

c#语法帮助,关于泛型编程 TEntity-Single(表达式谓词);,c#,C#,请解释参数。这是一个用于指定任何接受任何“tenty”(在本例中由调用它的集合定义)并返回bool的委托函数。实际上,委托是使用lambda函数指定的: TEntity Single(Expression<Func<TEntity, bool>> predicate); 在您的示例中,Single函数是一种扩展方法,应用于tenty的一般集合(我相信它没有任何限制,即必须是对象)。因此,TEntity的类型是根据您调用它的集合推断出来的。因此,这里有很多内容,但让我们

请解释参数。

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

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

在您的示例中,Single函数是一种扩展方法,应用于tenty的一般集合(我相信它没有任何限制,即必须是对象)。因此,TEntity的类型是根据您调用它的集合推断出来的。

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

Func
是一个接受输入的委托,它的类型是泛型的,所以我们称之为
tenty
。如果没有任何约束,这可以是任何内容,但不能是强类型的任何内容

一个级别是
表达式
。这是表达式树,它的强类型是接受输入并返回bool的委托。换句话说,它是表示函数的表达式树(回想一下编译器课程)

最后,最外层:
TEntity Single(表达式谓词)
是一个名为
Single
的方法,它采用表达式形式的谓词函数。返回的类型与传递给该函数的类型相同

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


希望这能有所帮助?

你的答案比我现在删除的答案解释得更好。我在读我的书时弄糊涂了!有一点需要澄清的是,如果Single发现多个不同于第一个的结果,它将抛出一个异常;它实际上根本不是Lambda表达式。它是一种
委托
类型,几乎总是作为Lambda传递。
items.Single(i => i.Id == 1);