क्या सी # में ऐसा करना संभव है?सी # में {ए, बी, सी} का उपयोग कर एक कतार को तुरंत चालू कर रहा है?
Queue<string> helperStrings = {"right", "left", "up", "down"};
या क्या मुझे इसके लिए पहले एक सरणी बनाना है?
क्या सी # में ऐसा करना संभव है?सी # में {ए, बी, सी} का उपयोग कर एक कतार को तुरंत चालू कर रहा है?
Queue<string> helperStrings = {"right", "left", "up", "down"};
या क्या मुझे इसके लिए पहले एक सरणी बनाना है?
नहीं, आप इस तरह से एक कतार शुरू नहीं कर सकते हैं।
वैसे भी, आप कुछ इस तरह कर सकते हैं:
var q = new Queue<string>(new[]{ "A", "B", "C" });
और इस, जाहिर है, एक सरणी के माध्यम से पारित करने के लिए इसका मतलब है।
Queue<T>
एक 'जोड़ें' विधि को लागू नहीं करता है, आप एक IEnumerable<string>
जिसमें से यह प्रारंभ किया जा सकता है का दृष्टांत करना होगा:
Queue<string> helperStrings
= new Queue<string>(new List<string>() { "right", "left", "up", "down" });
यह करने के लिए कि सी # में संभव है?
दुर्भाग्य से नहीं।
सी # में संग्रह प्रारंभकर्ताओं का नियम यह है कि ऑब्जेक्ट को (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 लागू करता है लेकिन इसमें कोई अतिरिक्त विधि नहीं है; इसमें एक एनक्यू विधि है।
उस स्पष्टीकरण के लिए धन्यवाद, जो अंतर्निहित यांत्रिकी को समझने में बहुत मदद करता है। – xeophin
तो संग्रह intializers मूल रूप से वाक्य रचनात्मक शर्करा हैं, है ना? – digEmAll
@digEmAll: यह सही है। यहां चीनी की मिठास दो गुना है। सबसे पहले, वे बहुत कॉम्पैक्ट हैं। दूसरा, वे बदल जाते हैं जो पहले अभिव्यक्ति में बयानों का समूह था; इसका मतलब है कि आप इन संदर्भों का उपयोग उन संदर्भों में कर सकते हैं जहां केवल एक अभिव्यक्ति वैध है, जैसे फील्ड प्रारंभकर्ता या LINQ क्वेरी। –
+1 हां, आप पहले एक सरणी बनाते हैं, लेकिन यह सुंदर दिखता है :) – Onkelborg
ठीक है ... सच होने के लिए बहुत सुविधाजनक होगा;) धन्यवाद! – xeophin
क्या इस विधि को तारों को अनबॉक्सिंग करने की आवश्यकता नहीं है? क्या नई सूची {"ए", "बी", "सी"} बेहतर होगी? –