2013-10-23 7 views
15

Kann mir jemand erklären, warum dieser Code:Keine beste Art für implizit typisierte Array gefunden

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

Ist mir den Fehler geben:

No best type found for implicitly-typed array

während dieses völlig in Ordnung funktioniert:

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

Abgesehen von einer anderen Eigenschaft (B im letzten Eintrag des ersten Beispiels), sind sie gleich. Doch der erste kompiliert nicht. Warum?

+0

Einfachere Probe würde 'new [] {1, "text", true}' - gleiches Problem mit verschiedenen Elementtypen, aber viel kürzer. –

+0

@AlexeiLevenkov Ich habe es ein wenig vereinfacht, aber Ihr Beispiel ist ein anderer Fall (verschiedene Typen im Gegensatz zu verschiedenen Eigenschaftsnamen). – CodeCaster

+1

@CodeCaster Können Sie die Antworten auch bearbeiten? Im Moment scheinen sie nicht auf die Frage bezogen zu sein :-( –

Antwort

26

Es ist, weil Sie zwei verschiedene anonyme Typen im ersten Beispiel haben, ist die Definition des letzten Elements anders als die anderen.

Im ersten Beispiel enthält eines die Eigenschaft A und eine Eigenschaft B, und der Compiler kann den Array-Typ nicht ermitteln. Im zweiten Beispiel gibt es einen anonymen Typ, der nur A enthält.

Ich denke, es ist ein Typo, so können Sie in erstem Beispiel

Von MSDNB-A in letzten Eintrag ändern:

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

Anonyme Typen gleich sein müssen. Ändern Sie einfach B zu A.

12

können Sie verwenden:

var marketValueData = new object[] { 
    new { A = "" }, 
    new { A = "" }, 
    new { B = "" }, 
    ..., 
}; 
Verwandte Themen