给定以下 C# 代码:
var a = new[] {"123", "321", 1}; //no best type found for implicitly typed array
以及它在 VB.NET 中的对应物:
Dim a = {"123", "321", 1} 'no errors
看来 VB.NET 能够正确推断a
=的类型Object()
,而 C# 一直抱怨,直到将上述内容固定为:
var a = new object[] {"123", "321", 1};
对于上述场景,有没有办法在 C# 中自动推断类型?
编辑:在 C# 沙箱中使用不同类型后的有趣观察 - 如果所有元素在继承树中都有共同的父级,并且该父级不是,Object
或者如果元素可以转换为更广泛的类型(不丢失精度,例如Integer -> Double
)。所以这两个都可以工作:
var a = new[] {1, 1.0}; //will infer double[]
var a = new[] {new A(), new B()}; //will infer A[], if B inherits from A
我认为这种行为在 C# 中是不一致的,因为所有类型都继承自Object
,所以它与任何其他类型的祖先并没有太大的不同。这可能是一种设计,所以没有必要争论,但如果你知道原因,知道为什么会很有趣。