加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:42:22 所属栏目:百科 来源:网络整理
导读:看起来像ExpressionTrees编译器应该在很多行为的C#规范附近,但与C#不同,不支持从十进制到任何枚举类型的转换: using System;using System.Linq.Expressions;class Program{ static void Main() { Funcdecimal,ConsoleColor converter1 = x = (ConsoleColor)
看起来像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初始版本是不会被修正的;在这一点上,我们只采取“用户被编译器触电”的错误,以便发布稳定.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读