2013-10-23 5 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 है।

मुझे लगता है कि यह एक टाइपो है, तो आपको पहले उदाहरण

में अंतिम प्रविष्टि में A करने के लिए B बदल सकते हैं MSDN से:

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 = "" }, 
    ..., 
}; 
संबंधित मुद्दे