मैं एक वस्तु का एक नया उदाहरण बनाना चाहता हूं IEnumerable<object>
क्या मैं यह कर सकता हूं?
IEnumerable<object> a = new IEnumerable<object>();
मैं एक वस्तु का एक नया उदाहरण बनाना चाहता हूं IEnumerable<object>
क्या मैं यह कर सकता हूं?
IEnumerable<object> a = new IEnumerable<object>();
IEnumerable<T>। आपको कुछ का उपयोग करना होगा List<T>।
IEnumerable<T>एक पुनरावृत्ति का प्रतिनिधित्व नहीं करता है - यह एक चलने योग्य अनुक्रम का प्रतिनिधित्व करता है। IEnumerator<T>स्वयं पुनरावृति का प्रतिनिधित्व करता है।
जवाबों:
आप उदाहरण के लिए एक उदाहरण बना सकते हैं List<object>, जो लागू करता है IEnumerable<object>। उदाहरण:
List<object> list = new List<object>();
list.Add(1);
list.Add(4);
list.Add(5);
IEnumerable<object> en = list;
CallFunction(en);
IEnumerable<T>को लागू नहीं करता है एक बुरा विचार है आईएमओ।
चूंकि अब आप निर्दिष्ट करते हैं कि आप इसे जोड़ना चाहते हैं, आप जो चाहते हैं वह सरल नहीं है, IEnumerable<T>लेकिन कम से कम एक ICollection<T>। मैं बस List<T>इस तरह का उपयोग करने की सलाह देता हूं :
List<object> myList=new List<object>();
myList.Add(1);
myList.Add(2);
myList.Add(3);
आप लागू IEnumerable<object>होने के बाद से हर जगह myList का उपयोग कर सकते हैं ।List<object>IEnumerable<object>
(स्पष्टीकरण से पहले पुराना जवाब)
आप इसका एक उदाहरण नहीं बना सकते IEnumerable<T>क्योंकि यह सामान्य इंटरफ़ेस है (यह कभी-कभी डिफ़ॉल्ट कार्यान्वयन को निर्दिष्ट करना संभव है, लेकिन आमतौर पर इसका उपयोग केवल COM के साथ किया जाता है)।
तो क्या आप वास्तव में चाहते हैं कि इंटरफ़ेस को लागू करने वाले एक वर्ग को त्वरित किया जाए । यह व्यवहार भिन्न होता है कि आप किस वर्ग को चुनते हैं। IEnumerable<T>
एक खाली अनुक्रम उपयोग के लिए:
IEnumerable<object> e0=Enumerable.Empty<object>();
एक गैर खाली गणना के लिए आप कुछ संग्रह का उपयोग कर सकते हैं जो लागू होते हैं IEnumerable<T>। आम पसंद सरणी हैं T[], List<T>या यदि आप अपरिवर्तनीयता चाहते हैं ReadOnlyCollection<T>।
IEnumerable<object> e1=new object[]{1,2,3};
IEnumerable<object> e2=new List<object>(){1,2,3};
IEnumerable<object> e3=new ReadOnlyCollection(new object[]{1,2,3});
लागू करने IEnumerable<T>का एक और सामान्य तरीका C # 3 में शुरू की गई इट्रेटर सुविधा है :
IEnumerable<object> MyIterator()
{
yield return 1;
yield return 2;
yield return 3;
}
IEnumerable<object> e4=MyIterator();
एक अन्य समाधान का उपयोग करना होगा Empty।
IEnumerable<object> a = Enumerable.Empty<object>();
इसके बारे में SO पर एक सूत्र है: क्या Enumerable.Empty () का उपयोग करना बेहतर है क्योंकि एक IEnumerable को शुरू करने के लिए नई सूची के विपरीत?
नहीं, क्योंकि IEnumerableआप एक इंटरफेस नहीं है।
आपको सबसे गैर-इंटरफ़ेस प्रकारों की एक खाली आवृत्ति बनाने में सक्षम होना चाहिए जो लागू होते हैं IEnumerable, जैसे: -
IEnumerable<object> a = new object[] { };
या
IEnumerable<object> a = new List<object>();
नहीं, आप ऐसा नहीं कर सकते। इसके बजाय कोड की निम्न पंक्ति का उपयोग करें:
IEnumerable<int> usersIds = new List<int>() {1, 2, 3}.AsEnumerable();
मुझे उम्मीद है यह मदद करेगा।
मैं एक नई enumerable वस्तु या सूची बनाना चाहता था और इसे जोड़ने में सक्षम था।
यह टिप्पणी सब कुछ बदल देती है। आप एक जेनेरिक में नहीं जोड़ सकते IEnumerable<T>। यदि आप इसमें इंटरफेस के साथ रहना चाहते हैं System.Collections.Generic, तो आपको एक ऐसे वर्ग का उपयोग करने की आवश्यकता है जो इसे लागू ICollection<T>करता है List<T>।
कोई IEnumerable एक इंटरफ़ेस है, आप इंटरफ़ेस का उदाहरण नहीं बना सकते
आप ऐसा कुछ कर सकते हैं
IEnumerable<object> a = new object[0];
new SomeComInterface()इंटरफ़ेस के संबंधित "CoClass" को इंटरफ़ेस को तुरंत इंस्टेंट करने के बजाय तुरंत करता है?
newकुछ स्थितियों में इंटरफ़ेस के साथ उपयोग कर सकते हैं ।
तुम यह केर सकते हो:
IEnumerable<object> list = new List<object>(){1, 4, 5}.AsEnumerable();
CallFunction(list);