2010-10-26 19 views

उत्तर

16

नहीं, आप इस तरह से एक कतार शुरू नहीं कर सकते हैं।

वैसे भी, आप कुछ इस तरह कर सकते हैं:

var q = new Queue<string>(new[]{ "A", "B", "C" }); 

और इस, जाहिर है, एक सरणी के माध्यम से पारित करने के लिए इसका मतलब है।

+0

+1 हां, आप पहले एक सरणी बनाते हैं, लेकिन यह सुंदर दिखता है :) – Onkelborg

+0

ठीक है ... सच होने के लिए बहुत सुविधाजनक होगा;) धन्यवाद! – xeophin

+0

क्या इस विधि को तारों को अनबॉक्सिंग करने की आवश्यकता नहीं है? क्या नई सूची {"ए", "बी", "सी"} बेहतर होगी? –

3

Queue<T> एक 'जोड़ें' विधि को लागू नहीं करता है, आप एक IEnumerable<string> जिसमें से यह प्रारंभ किया जा सकता है का दृष्टांत करना होगा:

Queue<string> helperStrings 
    = new Queue<string>(new List<string>() { "right", "left", "up", "down" }); 
12

यह करने के लिए कि सी # में संभव है?

दुर्भाग्य से नहीं।

सी # में संग्रह प्रारंभकर्ताओं का नियम यह है कि ऑब्जेक्ट को (1) IENumerable लागू करना होगा, और (2) में एक विधि जोड़ें। संग्रह प्रारंभकर्ता

new C(q) { r, s, t } 

रूप

temp = new C(q); 
temp.Add(r); 
temp.Add(s); 
temp.Add(t); 

पुनः लिखा जाता है और उसके बाद जो कुछ भी अस्थायी में है का परिणाम है।

Queue<T> IENumerable लागू करता है लेकिन इसमें कोई अतिरिक्त विधि नहीं है; इसमें एक एनक्यू विधि है।

+0

उस स्पष्टीकरण के लिए धन्यवाद, जो अंतर्निहित यांत्रिकी को समझने में बहुत मदद करता है। – xeophin

+0

तो संग्रह intializers मूल रूप से वाक्य रचनात्मक शर्करा हैं, है ना? – digEmAll

+2

@digEmAll: यह सही है। यहां चीनी की मिठास दो गुना है। सबसे पहले, वे बहुत कॉम्पैक्ट हैं। दूसरा, वे बदल जाते हैं जो पहले अभिव्यक्ति में बयानों का समूह था; इसका मतलब है कि आप इन संदर्भों का उपयोग उन संदर्भों में कर सकते हैं जहां केवल एक अभिव्यक्ति वैध है, जैसे फील्ड प्रारंभकर्ता या LINQ क्वेरी। –

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