将“is”运算符应用于方法组:为什么编译器允许它?

时间:2015-01-19 08:54:06

标签: c# method-group

请考虑以下代码:

var result = IDisposable.Dispose is object; //result equals false

令我感到惊讶的是(我的colleague实际上引起了我的注意)这段代码已被编译。

首先我的想法是IDisposable.Dispose以某种方式转换为兼容的delegate。但结果必须是true,因为delegate当然可以与object分开。

查看规范我发现编译器对方法组进行了特殊处理(在 操作的上下文中):

  

如果E是方法组......结果为假。

纯粹出于好奇,为什么它在规范中?为什么编译器允许它?为什么不抛出编译时错误(比如匿名函数)?

更新:

  • 它在VS2013(12.0.21005.1)和.NET 4.5 / 4.5.1中为我编译;
  • piojo 告诉我们这段代码不是用Mono编译的(我不能自己检查);
  • 在VS2015(4.5或3.5)中未为 leppie 编译;
  • 未在VS2013 / 12.0.30501.00 update 2下编译,.NET 4.5.2 target( caramiriel );

0 个答案:

没有答案