由於最後一項爲空,此聲明會導致錯誤。如何將空數組作爲C中的隱式數組的一部分#
var foo = new[] {
new [] {1, 2, 3},
new [] {3, 4, 5},
new [] {}
};
據我所知,一般的編譯器將需要所有這些陣列是相同的(匿名)類型的,但現在看來似乎應該讓「空」作爲一個特例,像所有其他鍵入。
是否有某種方式來聲明上面,以便我可以有一個空數組以及非空的數組?
邁克爾
由於最後一項爲空,此聲明會導致錯誤。如何將空數組作爲C中的隱式數組的一部分#
var foo = new[] {
new [] {1, 2, 3},
new [] {3, 4, 5},
new [] {}
};
據我所知,一般的編譯器將需要所有這些陣列是相同的(匿名)類型的,但現在看來似乎應該讓「空」作爲一個特例,像所有其他鍵入。
是否有某種方式來聲明上面,以便我可以有一個空數組以及非空的數組?
邁克爾
當然,只讓它作爲一個int[]
:
int[][] foo = new[] {
new [] {1, 2, 3},
new [] {3, 4, 5},
new int[] {}
};
你可以,如果你iniltialise特定類型:
var foo = new int[][] {
new int[] {1, 2, 3},
new int[] {3, 4, 5},
new int[] {}
};
演員在哪裏? –
new [] {1, 2, 3}
是
速記new int[] { 1,2,3 }
編譯器可以看出它必須是int
,因爲數組包含整數。
但如果你說
new [] { }
因爲數組爲空,類型不能確定。所以你必須明確地告訴編譯器類型是什麼:
var foo = new[] {
new [] {1, 2, 3},
new [] {3, 4, 5},
new int [] {}
};
隱式地創建一個空的數組是不可能的。 正如@Dennis_E所述 「自數組爲空,類型不能被確定。」
可以參考All possible C# array initialization syntaxes
從相關的部分引述:
空陣列
...
var data8 = new [] { } and int[] data9 = new [] { } are not compilable.
...
也許到this MSDN article-它給出較少的細節btw-
如果你不想要明確寫類型,你可以使用LINQ篩選最後一個數組
var foo = new [] {
new [] {1, 2, 3},
new [] {3, 4, 5},
new [] {0}.Where(e => false).ToArray()
};
這種方式,將工作的事件,如果你有這個代碼更改爲:
var foo = new[] {
new [] { new { N = 1 }, new { N = 2 }, new { N = 3} },
new [] { new { N = 3 }, new { N = 4 }, new { N = 5} },
new [] { new { N = 0 } }.Where(e => false).ToArray()
};
這不可能確定元素的類型。 (因爲它沒有元素) –