C# .NET null 如何在匿名类型中进行强制转换?

Cse*_*rvr 1 .net c# casting anonymous-types conditional-operator

此代码将无法编译:

        var x = new {
            Property = null,
        };

Run Code Online (Sandbox Code Playgroud)

但以下例外:无法将 null 分配给匿名类型属性

但这会工作得很好:

        var someBool = false;
        var x = new {
            Property = someBool ? "value" : null,
        };
Run Code Online (Sandbox Code Playgroud)

我认为存在像这样的隐式转换 - (string)null 但不完全确定。

所以我想更多地了解这个案例以及它的内部工作原理(我没有找到任何文章解释这一点)

Gur*_*ron 5

编译器需要确定匿名类型属性的类型,这不能仅从null(尽管您可以争论object在这种情况下使用,但请参阅下面的引用)来完成,相反,三元运算符有一个类型(请参阅链接文档解释编译器如何确定它),这是string在 的情况下someBool ? "value" : null

来自匿名类型文档:

用于初始化属性的表达式不能是null、匿名函数或指针类型。