2010-01-28 15 views
8

मैं गुमनाम प्रकार से गुमनाम सूची बनाने के लिए एक परिदृश्य है, और मैं हासिल की है कि का उपयोग करगुमनाम प्रकार स्वचालित प्रारंभ में महत्वपूर्ण फ़ील्ड का क्रम है?

public static List<T> MakeList<T>(T itemOftype) 
    { 
     List<T> newList = new List<T>(); 
     return newList; 
    } 

    static void Main(string[] args) 
    { 
     //anonymos type 
     var xx = new 
     {        
      offsetname = x.offName, 
      RO = y.RO1 
     }; 

     //anonymos list 
     var customlist = MakeList(xx); 

     //It throws an error because i have given the wrong order 
     customlist.Add(new { RO = y.RO2, offsetname = x.offName }); 
     customlist.Add(new { RO = y.RO3, offsetname = x.offName }); 

     //but this works 
     customlist.Add(new { offsetname = x.offName, RO = y.RO2 }); 
     customlist.Add(new { offsetname = x.offName, RO = y.RO3 }); 
    } 

ये त्रुटि संदेश

System.Collections.Generic.List.Add हैं (AnonymousType # 1) ' कुछ अमान्य तर्क

तर्क है ' 1 ': से परिवर्तित नहीं कर सकते' AnonymousType # 2 'को' AnonymousType # 1 '

इसके पीछे क्या कारण है ??

उत्तर

9

हां, यह महत्वपूर्ण है।

दो अज्ञात प्रकार के प्रारंभकर्ता एक ही ऑटो-जेनरेट किए गए प्रकार का उपयोग करते हैं यदि संपत्ति के नाम और प्रकार एक ही क्रम में समान हैं।

ऑशिंग करते समय ऑर्डर प्रासंगिक हो जाता है; एक हैश मान की गणना के लिए एक निरंतर क्रम के साथ उत्पन्न होने के लिए प्रकार संभव हो सकता था, लेकिन यह एक प्रकार का अद्वितीय बनाने के हिस्से के रूप में संपत्ति आदेश को शामिल करना आसान लगता है।

विवरण के लिए सी # 3 स्पेक के अनुभाग 7.5.10.6 देखें। विशेष रूप से:

एक ही कार्यक्रम के भीतर, दो गुमनाम वस्तु initializers है कि एक ही नामों की संपत्तियों की एक अनुक्रम को निर्दिष्ट और संकलन समय उसी क्रम ही गुमनाम प्रकार के उदाहरण का उत्पादन करेगा में प्रकार ।

+0

स्पष्टीकरण के लिए धन्यवाद जोन .. – RameshVel

+0

मैं समझ सकता हूं कि संपत्तियों का नाम और डेटाटाइप मिलान करने की आवश्यकता है .. लेकिन मुझे नहीं पता कि ऑर्डर को बदलने के क्रम में क्यों बदलना आवश्यक है। कोई भी विशिष्ट कारण यह क्यों है या 'इस तरह उन्होंने इसे करने का फैसला किया'? – Gishu

+1

@ गिशू: मुझे लगता है कि यह संभवतः संकलक को सरल बनाता है, इसलिए मुझे लगता है कि ऑनस उन लोगों पर है जो इसे अनिवार्य कारण देने के लिए * नहीं चाहते हैं * यह नहीं होना चाहिए :) –

3

हां, फ़ील्ड का क्रम महत्वपूर्ण है। वही फ़ील्ड, अलग-अलग क्रम विभिन्न प्रकार पैदा करेंगे।

भाषा विनिर्देश से:

"एक ही कार्यक्रम के भीतर, दो गुमनाम वस्तु initializers वही नाम के गुणों का एक अनुक्रम को निर्दिष्ट और संकलन समय उसी क्रम में एक ही के उदाहरण का उत्पादन करेगा में प्रकार है कि अनाम प्रकार। "

+0

ब्रायन, स्पष्टीकरण के लिए धन्यवाद .. अज्ञात प्रकारों में ToString() पर – RameshVel

5

इसके पीछे क्या कारण है ??

मान लीजिए कि आदेश कोई फर्क नहीं पड़ता। मान लीजिए कि आप कंपाइलर टीम पर थे। मेरे लिए ऐसे अज्ञात प्रकार पर "ToString" के कार्यान्वयन के सटीक व्यवहार का वर्णन करें, जैसे कि कार्यान्वयन सभी उपयोगकर्ता अपेक्षाओं को पूरा करता है।

मैं व्यक्तिगत रूप से एक के साथ नहीं आ सकता, लेकिन शायद आप कर सकते हैं।

+2

उसी डेटा पर अलग-अलग परिणाम प्राप्त करते हैं लेकिन विभिन्न क्रम में .. धन्यवाद, अब मैं इसे गणना हैश मानों से जोड़ सकता हूं .. – RameshVel

संबंधित मुद्दे