2013-10-23 24 views
15

有人可以解釋我爲什麼這個代碼:發現隱式類型數組沒有最好型

var marketValueData = new[] { 
    new { A = "" }, 
    new { A = "" }, 
    new { B = "" }, 
}; 

是給我的錯誤:

No best type found for implicitly-typed array

,而這一個工作完全正常:

var marketValueData = new[] { 
    new { A = "" }, 
    new { A = "" }, 
    new { A = "" }, 
}; 

除了不同的屬性(B在第一個示例的最後一項),它們是相同的。然而,第一個不是編譯。爲什麼?

+0

簡單的樣品將是'新的[] {1, 「文本」,真正}' - 同樣的問題,用不同的元素類型,但短得多。 –

+0

@AlexeiLevenkov我簡化了一下,但你的例子是一個不同的情況(不同的屬性名稱不同)。 – CodeCaster

+1

@CodeCaster你能編輯答案嗎?目前,他們似乎沒有關係到這個問題:-( –

回答

26

這是因爲您在第一個示例中有兩種不同的匿名類型,最後一項的定義與其他項的定義不同。

在第一個示例中,一個包含A屬性,另一個包含B屬性,編譯器無法確定數組的類型。在第二個例子中,有一個匿名類型,僅包含A

我認爲這是一個錯字,所以你可以在最後一個項目在第一個例子

改變BAMSDN

You can create an implicitly-typed array in which the type of the array instance is inferred from the elements specified in the array initializer.

6

匿名類型必須相同。只需將B更改爲A即可。

12

您可以使用:

var marketValueData = new object[] { 
    new { A = "" }, 
    new { A = "" }, 
    new { B = "" }, 
    ..., 
}; 
相關問題