次の 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
。つまり、他の型とそれほど異なる先祖ではありません。これはおそらく設計上のものなので、議論の余地はありませんが、理由を知っているなら、その理由を知ることは興味深いでしょう.