表达式<;Func<;T、 bool>>;声明的意思
本文关键字:lt gt 声明 意思 Func 表达式 bool | 更新日期: 2023-09-27 18:20:50
有人能用一种传达表达式含义以及如何调用它的方式来解释下面的声明吗?
void Delete<T>(Expression<Func<T, bool>> expression) where T : class, new();
我把它读成:通过传递lambda表达式来删除T
类型的对象,该表达式的参数是返回bool
的T
类型的对象。
另外,你能更换吗Func<T, bool> expression
具有Predicate<T> expression
此方法可能是集合类型的成员,是吗?
"谓词"是任何对"这个东西是那个集合的成员吗?"这个问题说"是"或"否"的设备。因此,集合"整数甚至正整数"的谓词将是x=> x > 0 && x % 2 == 0
。
此方法可能具有"从集合中删除谓词标识的集合中的所有集合成员"的语义。
谓词以表达式树的形式传递给方法,这是一种传递谓词的结构的方式,可以在运行时进行分析和转换。它通常用于"集合"实际上是某个地方的数据库的场景,并且删除请求需要转换为数据库查询语言的查询,并通过网络发送。
第一个方法接受表达式树(不一定是从lambda表达式树创建的)。表达式树表示接受T
并返回bool
的表达式。T
被约束为具有无参数构造函数的引用类型。
至于语义,这取决于文档/实现。
区分lambda表达式和表达式树本身很重要,lambda表达式是创建表达式树的一种方法。
至于它是否可以使用Predicate<T>
来代替——也许吧。这取决于实现对它的处理。它们当然代表相同的委托签名,但你不能简单地在这两种类型的表达式树之间转换。
此方法获取函数的表达式树作为参数,该树获取具有公共无参数构造函数的对象并返回布尔值。
您可以在此处阅读有关表达式树及其用法的更多信息:http://msdn.microsoft.com/en-us/library/bb397951.aspx
虽然方法签名在我看来是无效的,但实际上你是在传递一个表达式树(它可能不是LambdaExpression
类型,因为Expression
是所有表达式类型的抽象基类)。
类型约束规定T必须是引用类型(从类继承,不能是值类型(read:struct)),并且还必须定义默认构造函数。
编辑:见下面Jon的回答,他更正了签名并正确回答了问题,提供了比I更多的信息。