C# .NET 匿名类型如何为 null 强制转换?

C# .NET how null is casting in anonymous type?

提问人:Cseed rvr 提问时间:12/9/2022 最后编辑:Guru StronCseed rvr 更新时间:12/9/2022 访问量:92

问:

此代码不会编译:

        var x = new {
            Property = null,
        };

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

但这会很好用:

        var someBool = false;
        var x = new {
            Property = someBool ? "value" : null,
        };

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

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

C# .NET 强制转换 条件运算符 匿名类型

评论

2赞 Roman Ryzhiy 12/9/2022
真?stackoverflow.com/questions/24851913/......
0赞 Cseed rvr 12/9/2022
我的主要问题是这在内部是如何工作的
1赞 Roman Ryzhiy 12/9/2022
因此,请仔细阅读答案:“以便编译器知道该属性需要哪种类型”。

答:

5赞 Guru Stron 12/9/2022 #1

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

来自匿名类型文档:

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

评论

0赞 Roman Ryzhiy 12/9/2022
string?实际上。