2009-04-27 18 views
21

पर मूल्यों के साथ सूची बनाएं, जैसे संकलन समय पर एक सरणी बनाना संभव है; संकलन समय

int[] myValues = new int[] { 1, 2, 3 } ; 

लेकिन मैं ऐसा कुछ करना चाहता हूं;

List<int> myValues = new List<int>() { 1, 2, 3 }; 

संकलक कहते हैं नहीं। वहाँ LINQ का उपयोग किए बिना इस (सी # 2.0) करने के लिए एक रास्ता है (सी # 3.0)?

+10

बस चुनने की, बाद का उपयोग नहीं कर रहा है LINQ - यह C# 3.0 से संग्रह प्रारंभकर्ता का उपयोग कर रहा है, लेकिन LINQ इस प्रकार नहीं है। –

उत्तर

43
List<int> myValues = new List<int>(new int[] { 1, 2, 3 }); 

यह एक मध्यवर्ती सरणी बनाएगा हालांकि एक ही काम करने का एक और अधिक प्रभावी तरीका हो सकता है।

संपादित करें:

जॉन Feminella एक कारखाने विधि बनाने पैरामीटर की एक सूची स्वीकार करते हैं और जो आप के रूप में निम्न प्रकार लागू कर सकता है एक सूची वापस करने के लिए सुझाव दिया:

List<T> CreateList<T>(params T[] values) 
{ 
    return new List<T>(values); 
} 

जो आप के रूप में उपयोग कर सकते हैं इस प्रकार है:

List<int> myValues = CreateList(1, 2, 3); 
+1

एक अन्य समाधान अपने कारखाने/विस्तार विधि को बनाना है जो आपको पसंद किए गए किसी भी पैरामीटर को स्वीकार करता है और उपयुक्त सूची बनाता है। –

3

जिस तरह से आप सुझाव देते हैं उसे पहली बार सी # 3.0 में पेश किया गया था (LINQ के साथ कुछ लेना देना नहीं है, यह एक भाषा सुविधा थी जिसे पेश किया गया था)।

नहीं है कोई "शॉर्टकट" (सूची आरंभीकरण) में # 2.0 सी सिर्फ इतना है कि ऐसा करने के लिए, या तो नई सूची और फिर myValues.Add के माध्यम से मैन्युअल संख्या जोड़ सकते हैं या आप निम्न कर सकता है:

int[] arrMyValues = new int[] {1, 2, 3}; 
List<int> myValues = new List<int>(arrMyValues); 

टी की सूची टी के कंटेनर में टी का एक आईनेमरेबल ले सकती है, जिसमें से सभी टी को उस सूची में आईनेमरेबल में शामिल किया जाएगा, जो int [] लागू करता है, टी के IENumerable लागू करता है, जैसे आप "मिश्रण और मिलान" कर सकते हैं ।

इसके अलावा, सी # 2.0 में ऐसी कोई चीज करने का कोई तरीका नहीं है जिसका आप वर्णन करते हैं।

2

संग्रह प्रारंभकर्ता केवल सिंटैक्स चीनी हैं, इसलिए यदि आप 3.0 कंपाइलर के साथ संकलित करते हैं तो आप 2.0 पर लक्षित एप्लिकेशन में उनका उपयोग कर सकते हैं।

27

पैट्रिक का वह जवाब है जिसे आप ढूंढ रहे हैं। लेकिन मैं थोड़ा जोड़ना चाहता था। यदि आप संख्याओं की लंबी श्रृंखला करना चाहते हैं और उन्हें हाथ से टाइप करना पसंद नहीं करते हैं, तो आपको एनमेरेबल.रेंज विधि को देखना चाहिए। इसका उपयोग रनटाइम पर अनुक्रमिक संख्याओं की एक श्रृंखला उत्पन्न करने के लिए किया जा सकता है। उदाहरण के लिए, अपने नमूना के रूप में

var list = Enumerable.Range(1,3).ToList(); 
0

आप भी इस तरह यह कर सकते हैं, System.Linq.Enumerable का उपयोग कर इस प्रकार लिखा गया हो सकता:

int[] categories = { 221, 222, 223, 224, 225, 226, 227, 228, 235, 236, 254, 255, 256 };   
var ticketsToProcess = categories.ToList(); 
संबंधित मुद्दे