c# – 这是一个ExpressionTrees的错误? #2

看起来像ExpressionTrees编译器应该在很多行为的C#规范附近,但与C#不同,不支持从十进制到任何枚举类型的转换:
using System;
using System.Linq.Expressions;

class Program
{
  static void Main()
  {
    Func<decimal,ConsoleColor> converter1 = x => (ConsoleColor) x;
    ConsoleColor c1 = converter1(7m); // fine

    Expression<Func<decimal,ConsoleColor>> expr = x => (ConsoleColor) x;

    // system.invalidOperationException was unhandled
    // No coercion operator is defined between types
    // 'System.Decimal' and 'System.ConsoleColor'.

    Func<decimal,ConsoleColor> converter2 = expr.Compile();

    ConsoleColor c2 = converter2(7m);
  }
}

其他很少使用的C#显式转换,如double – >枚举类型存在并按照C#规范中说明的方式工作,但不是十进制 – >枚举类型.这是一个bug吗?

解决方法

这可能是一个错误,这可能是我的错.对于那个很抱歉.

在编译器和运行时,正确编写表达式树代码是最重要的部分之一,因为十进制转换在运行时实际上是以用户定义的转换实现的,而是被编译器视为内置转换.十进制是具有此属性的唯一类型,因此在这些情况下,分析仪中有各种专用齿轮.实际上,在分析器中有一个叫做IsEnumToDecimalConversion的方法来处理可空的枚举到可空的十进制转换的特殊情况;相当复杂的特殊情况.

赔率是好的,我没有考虑到一些情况,另一方面,并​​产生坏的代码,结果.谢谢你的笔记我会把它发送给测试团队,我们会看看我们是否可以重做.赔率是好的,如果这确实证明是真正的错误,这对于C#4初始版本是不会被修正的;在这一点上,我们只采取“用户被编译器触电”的错误,以便发布稳定.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...