C# 编译器错误:允许从 Nullable<decimal> 转换为十进制

考虑以下代码:

    public class DecimalWrapper
    {
        public static implicit operator DecimalWrapper(decimal x) => new();
    }

    [Fact]
    public void Test()
    {
        // Why this even compiles? Since there is no implicit conversion from decimal? -> decimal
        DecimalWrapper c = (decimal?)null; // variable 'c' is null!
    }

我根本不希望它编译,因为没有从十进制隐式转换?到十进制。

我认为这是一个错误还是我做错了什么?

我已经看到了这一点:
从 int 提升/可空转换的严重错误,允许从十进制转换

但这看起来不一样,而且已经过时了(7 年以上),所以现在应该修复错误,但无法确定,因为所有指向错误报告的链接都消失了)... 🙁

我真的很想在真正的解决方案中使用这样的代码(跟踪计算),但这阻止了我。

PS:我在 Windows 上编译。

回答

根据规范,提升转换运算符只允许用于值类型到值类型的转换(及其可为空的对应物),但在 Roslyn 编译器源代码中,您可以找到下一条评论:

所以这似乎是一个实际的错误,它是为了向后兼容而引入的。而反编译正好说明了这种行为。


以上是C# 编译器错误:允许从 Nullable<decimal> 转换为十进制的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>