![]() |
1
5
在规范第7.16.3节中,+=和-=操作符被称为“事件分配”,这无疑使它听起来像一个分配操作符。事实上,它在第7.16节(“赋值运算符”)中是一个非常大的提示:)从这个角度来看,编译器错误是有意义的。 但是,我同意 是 过度限制,因为表达式树完全可以表示lambda表达式所提供的功能。 我 犯罪嫌疑人 语言设计人员采用了“稍微更严格但更一致的操作员描述”的方法,恐怕会以这种情况为代价。 |
![]() |
2
1
+=是一个分配,不管它做什么(例如添加一个事件)。从解析器的角度来看,它仍然是一个赋值。 你试过吗?
|
![]() |
3
1
实际上,就编译器而言, 是 作业。 +=运算符被重载,但编译器并不关心它的作用。毕竟,您正在通过lambda生成一个表达式(在某一点上,它将被编译为实际的代码),而不是实际的代码。
所以编译器要做的是:在添加
您是否希望wireup方法采用表达式而不仅仅是操作? |
![]() |
4
1
为什么要使用表达式类?变化
编辑: 好吧,我现在从评论中更好地理解了你的问题。您是否有任何理由不能将p.myEvent和c.myHandler作为参数传递给wireup方法,并将事件处理程序附加到wireup方法中(对我来说,从设计的角度来看,这似乎更好)。这不会消除对表达式树的需求吗?我认为最好还是不要使用表情树,因为与代表相比,表情树的速度要慢得多。 |
![]() |
5
0
我认为问题是,除了
即使编译器知道表达式中的所有类型,在将lambda表达式转换为表达式树时,也会丢弃这些信息。(查看为表达式树生成的代码) 尽管如此,我还是会考虑提交给微软。 |
![]() |
Sergei · 删除数据框中多个列的列表中的某些元素 3 年前 |