此代码将不编译:
var x = new {
Property = null,
};
以下情况除外:无法将null赋给匿名类型属性
但这将工作得很好:
var someBool = false;
var x = new {
Property = someBool ? "value" : null,
};
我认为存在类似这样的隐式强制转换-(string)null但不完全确定。
所以我想知道更多关于这个案例的信息,以及它是如何在内部工作的(我没有找到任何解释这个问题的文章)
1条答案
按热度按时间rxztt3cl1#
编译器需要为匿名类型的属性确定类型,这不能仅仅从
null
来完成(尽管在这种情况下,你可以争论使用object
,但请参阅下面的引号),相反,ternary operator有一个类型(请参阅解释编译器如何确定它的链接文档),在someBool ? "value" : null
的情况下,它是string
。来自anonymous types文档:
用于初始化属性的表达式不能是
null
、匿名函数或指针类型。