【发布时间】:2010-07-12 20:07:53
【问题描述】:
我对 C# 语言的一些设计选择很感兴趣。
C# 规范中有一条规则允许使用方法组作为is 运算符的表达式:
class Foo {
static void Main() { if (Main is Foo) Main(); }
}
如规范所述,上述条件始终为假:
7.10.10 is 运算符
• 如果 E 是方法组或空字面量,of 如果 E 的类型是引用类型 或者一个可为空的类型并且E的值为null,结果为false。
我的问题: 允许在像 is 这样的“运行时”运算符内的方法组中使用没有运行时表示的 C# 语言元素的目的/要点/原因是什么?
【问题讨论】:
-
这……太棒了。
as运算符的部分没有提及方法组。 -
@Tim:但是“as”运算符被定义为类型转换、条件运算符和“is”运算符组合的语法糖,因此“as”运算符不需要提及方法组。
-
所以
Main as Foo总是null。并且Main as System.Action也是null,而System.Action a = Main很好。 -
@TimRobinson(C# 5 编译器)
Main as Action给出error CS0039: Cannot convert type 'method group' to 'System.Action' via a reference conversion, boxing conversion, unboxing conversion, wrapping conversion, or null type conversion,所以不,它不是null。
标签: c# language-design method-group