![]() |
1
133
简短回答:不。 可能不相关的较长回答:
编辑: 下面是一些表达式链接。
|
![]() |
2
119
我喜欢大卫的回答,但我认为我会学究。这个问题说,“一旦它被编译”,这意味着两个表达式
有
已编译。它们是如何编译的,但是其中一个被转换为委托,另一个被转换为表达式树?这是一个棘手的问题——您必须使用匿名方法的另一个特性,这是lambda表达式不共享的唯一特性。如果在不指定参数列表的情况下指定匿名方法
完全
它与返回void且没有任何
但灾难来袭!至少在C 3.0中,不能将带有块体的lambda表达式转换为表达式-也不能将带有赋值的lambda表达式转换为包含赋值的lambda表达式(即使它用作返回值)。这可能会随着C 4.0和.NET 4.0而改变,这允许在表达式树中表达更多的内容。换言之,用mojofilter给出的例子,两人将 几乎 总是被转换成相同的东西。(一分钟后详细介绍。) 我们可以使用委托参数技巧,如果我们稍微改变主体:
但是等等!如果我们足够狡猾的话,即使不使用表达式树,我们也可以区分这两者。下面的示例使用重载解析规则(以及匿名委托匹配技巧)。
哎哟。记住孩子们,每当您重载从基类继承的方法时,一只小猫咪就会开始哭。 |
![]() |
3
2
大卫B是对的。注意,使用表达式树可能有好处。Linq to SQL将检查表达式树并将其转换为SQL。 您还可以使用lamdas和表达式树,以安全的方式将类成员的名称有效地传递给框架。 Moq 就是一个例子。 |
![]() |
4
2
在上面的两个例子中没有区别,零。 表达式:
是具有语句体的lambda表达式,因此无法将其编译为表达式树。实际上,它甚至不编译,因为它需要在0之后使用分号:
|
![]() |
5
-1
有一点不同 例子:
我用lambda替换:(错误)
|
![]() |
6
-2
这里有一些基本的。 这是匿名方法
由于匿名方法没有任何名称,我们需要一个委托,在该委托中我们可以同时分配这两个方法或表达式。例如
与lambda表达式相同。通常我们需要代表使用它们
我们可以使用func委托来使用这个表达式。
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |