2012-11-06 20 views
12

मैं किसी ऑब्जेक्ट के साथ एक सूची प्रारंभ करना चाहता हूं और उस विशिष्ट क्रम में ऑब्जेक्ट्स की एक सूची प्रारंभ करना चाहता हूं। वर्तमान में, मैं कर रहा हूँ:ऑब्जेक्ट्स की एक ही ऑब्जेक्ट और अन्य सूची के साथ सूची आरंभ करें

List<MyObject> list = new List<MyObject>(); 
list.Add(object1); // object1 is type MyObject 
list.AddRange(listOfObjects); // listOfObjects is type List<MyObject> 

मैं मजबूत करने के लिए है कि एक प्रारंभ बयान में उम्मीद थी (वाक्य रचना निश्चित रूप से गलत है):

List<MyObject> newList = new List<MyObject>() { object1, listOfObjects }; 

इस संक्षेप में करने के लिए एक तरीका है?

+0

इसका LINQ (जेनेरिक संग्रह .NET 2.0 के बाद से मौजूद है) के साथ कुछ लेना देना नहीं है, इसलिए मैंने इसे आपके लिए दोबारा टैग किया। – Adam

+0

आपके पहले कोड स्निपेट के साथ आपके पास क्या समस्या है? यह असंतोषजनक या समस्याग्रस्त किसी भी तरह से कैसे है। वस्तुतः कोई अन्य विकल्प अधिक जटिल होगा, अधिक कोड लें, कम पठनीय हो, और बहुत कम प्रदर्शन करने वाला हो। मुझे यकीन है कि आपके प्रोजेक्ट के अधिक समस्याग्रस्त पहलू हैं आप समय तय करने में व्यतीत कर सकते हैं। – Servy

+0

@ सर्वी मैंने यह नहीं बताया कि मेरा कोड खंड समस्याग्रस्त था। मैंने पूछा कि क्या सूची शुरू करने का एक और संक्षिप्त तरीका था। मैं उन सभी विकल्पों को नहीं जानता जो वहां हैं, इसलिए मैंने सवाल क्यों पूछा। मैं मानता हूं कि अधिकांश अन्य तरीकों (जो मुझे पता है) अधिक जटिल या कम पठनीय हैं। आपके सहयोग के लिए धन्यवाद। –

उत्तर

17

तत्वों का क्रम महत्वपूर्ण नहीं है, तो आप उपयोग कर सकते हैं:

List<MyObject> newList = new List<MyObject>(listOfObjects) { object1 }; 

यह List<T> निर्माता जो स्वीकार करता है का उपयोग करके काम करता है एक IEnumerable<T>, फिर अन्य आइटम जोड़ने के लिए संग्रह प्रारंभकर्ता। उदाहरण के लिए, निम्नलिखित:

static void Main() 
{ 
    int test = 2; 
    List<int> test2 = new List<int>() { 3, 4, 5 }; 
    List<int> test3 = new List<int>(test2) { test }; 

    foreach (var t in test3) Console.WriteLine(t); 

    Console.ReadKey(); 
} 

प्रिंट होगा:

3 
4 
5 
2 

नोट करें कि अपने मूल से अलग है, तथापि, के रूप में अलग-अलग आइटम पिछले जोड़ा जाता है।

हैं क्रम महत्वपूर्ण है, हालांकि, मैं व्यक्तिगत रूप से सिर्फ सूची का निर्माण होता है, प्रारंभकर्ता में अपना पहला वस्तु में रखने, और AddRange बुला:

List<MyObject> newList = new List<MyObject> { object1 }; 
newList.AddRange(listOfObjects); 

यह इरादा बहुत स्पष्ट करता है, और निर्माण से बचा जाता है अस्थायी वस्तुओं की (जो LINQ के Concat, आदि का उपयोग करने की आवश्यकता होगी)।

+0

मुझे लगता है कि वह परिणामस्वरूप सूची में 'ऑब्जेक्ट 1' पहले आना चाहता है, इसलिए यह काम नहीं करेगा। – Lee

+1

@ ली हाँ - यही कारण है कि मैंने विशेष रूप से प्रश्न में टैग किया। महत्वपूर्ण होने के साथ एक विकल्प भी जोड़ा गया। –

7

मुझे लगता है कि सबसे अच्छा तुम कर सकते है:

List<MyObject> newList = new[] { object1 }.Concat(listOfObjects).ToList(); 
+1

मेरे द्वारा +1 - लेकिन यह एहसास है कि यह कुछ अतिरिक्त "कचरा" बनाता है क्योंकि आप एक सरणी बना रहे हैं जो सिर्फ फेंक दिया जाता है। कोई बड़ा सौदा नहीं है, लेकिन एक विधि कॉल से बचने के लिए एक गड़बड़ की तरह लगता है;) –

+0

क्या आपको लगता है कि यह अधिक पठनीय है या कोड स्निपेट से शुरू करने के लिए किसी भी तरह से समझना आसान है? मैं कहता हूं कि यह आगे एक कदम पीछे नहीं है। – Servy

+0

@ सर्वी - सवाल एक और संक्षिप्त विधि के लिए पूछा गया, और यह है। – Lee