অনুমিত << অবজেক্ট> এ = নতুন আইনিউমেবল <অবজেক্ট> (); আমি কি ইহা করতে পারি?


95

আমি একটি অবজেক্টের একটি নতুন উদাহরণ তৈরি করতে চাই IEnumerable<object>

আমি কি ইহা করতে পারি?

IEnumerable<object> a = new IEnumerable<object>();


4
না, এবং এটি এমনকি বোঝায় না।
— কোডসইনচওস

4
@ উইংম্যান ২০-২০: ঠিক আছে, যা সবকিছু বদলে দেয়। আপনি জেনেরিক যুক্ত করতে পারবেন না IEnumerable<T>। আপনাকে এরকম কিছু ব্যবহার করতে হবে List<T>।
— জেসন

4
এক্ষেত্রে আপনার একটি কংক্রিট অ্যারে তালিকা প্রয়োজন <object> objs = নতুন অনুমিত << বিষয়>। আপনি কোনও
— পুনরাবৃত্তকারীকে

4
@ আইভো: নোট যা IEnumerable<T>কোনও পুনরাবৃত্তির প্রতিনিধিত্ব করে না - এটি একটি পুনরাবৃত্তীয় ক্রমকে উপস্থাপন করে। IEnumerator<T>নিজেই পুনরাবৃত্তকারীকে উপস্থাপন করে।
— জন স্কিটি

উত্তর:


117

আপনি উদাহরণস্বরূপ তৈরি করতে পারেন 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);

11
প্রদত্ত যে প্রশ্নটি জেনেরিকের ব্যবহার দেখায়, এমন একটি উদাহরণ দেওয়া যা জেনেরিকটি বাস্তবায়ন করে না IEnumerable<T>এটি একটি খারাপ ধারণা আইএমও।
— জন স্কিটি

আইইনিউরেবল <object> এন = তালিকা; এর পরিবর্তে কলফানশন (list.AsEnumerable ()) ব্যবহার করে যে কোনও সমস্যা; ...
— জিনা মারানো

আমি যদি সম্ভব হয় তবে আক্ষরিক ইনিশিয়ালাইজার সহ একটি অ্যারে ব্যবহার করতাম, এটি নেট। এনইটি-তে উপলব্ধ সবচেয়ে দক্ষ এবং লাইটওয়েট গণনার ধরণের এবং এর কোনও লিস্টের ওভারহেড নেই <>। আপনার যদি সত্যিকারের প্রয়োজন হয় বা আরম্ভের পরে পরিবর্তন করতে চান তবে তালিকাগুলি ব্যবহার করা উচিত। এছাড়াও, সিস্টেম.লিংক যুক্ত করা এবং অ্যারে বা তালিকায় অ্যাসনুমেবল () অনুরোধ করা আরও ভাল।
— চিহ্নিত করুন

33

যেহেতু আপনি এখন নির্দিষ্ট করেছেন আপনি এতে যুক্ত করতে চান, আপনি যা চান তা সাধারণ নয় IEnumerable<T>তবে অন্তত একটি ICollection<T>। আমি কেবল এটির List<T>মতো ব্যবহার করার পরামর্শ দিচ্ছি :

List<object> myList=new List<object>();
myList.Add(1);
myList.Add(2);
myList.Add(3);

প্রয়োগগুলি IEnumerable<object>যেহেতু আপনি প্রত্যাশিত যেখানেই মাইলিস্ট ব্যবহার করতে পারেন ।List<object>IEnumerable<object>

(স্পষ্ট করার আগে পুরানো উত্তর)

IEnumerable<T>এটি একটি সাধারণ ইন্টারফেস হওয়ার কারণে আপনি কোনও উদাহরণ তৈরি করতে পারবেন না (এটি কখনও কখনও ডিফল্ট বাস্তবায়ন নির্দিষ্ট করে দেওয়া সম্ভব হয় তবে এটি কেবলমাত্র সিওএম দিয়ে ব্যবহৃত হয়)।

সুতরাং আপনি যা চান তা হ'ল একটি ক্লাস ইনস্ট্যান্টিয়েট যা ইন্টারফেস প্রয়োগ করে 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>হ'ল সি # 3 এ চালু করা পুনরাবৃত্তি বৈশিষ্ট্য :

IEnumerable<object> MyIterator()
{
  yield return 1;
  yield return 2;
  yield return 3;
}

IEnumerable<object> e4=MyIterator();

33

আরেকটি সমাধান ব্যবহার করা হবে Empty।

IEnumerable<object> a = Enumerable.Empty<object>();

এটি সম্পর্কে একটি থ্রেড রয়েছে: এনিউনামেবল.এম্পটি () নতুন আইনেমিকের সূচনা করার জন্য নতুন তালিকার বিপরীতে ব্যবহার করা ভাল কি?


4
পরিষ্কার উত্তর!
— এডিপি 23

24

না আপনি যেহেতু পারেন না IEnumerableএকটি ইন্টারফেস।

আপনার প্রয়োগ হওয়া বেশিরভাগ অ ইন্টারফেস প্রকারের একটি খালি উদাহরণ তৈরি করতে সক্ষম হওয়া উচিত IEnumerable, যেমন: -

IEnumerable<object> a = new object[] { };

বা

IEnumerable<object> a = new List<object>();

@ অ্যাডামাল্ফ: আমি হ্রাস পেয়েছি, এবং তারপরে বিভ্রান্ত হয়ে পড়েছি, তাই তাত্ক্ষণিকভাবে কোনও মন্তব্য দিতে পারলাম না। ইন্টারফেসগুলি ধরণের, তাই আপনার উত্তর বিপজ্জনকভাবে ভুল কারণ এটি একটি সাধারণ ভুল ধারণা প্রচার করে।
— জেসন


1

আমি একটি নতুন অঙ্কযোগ্য বস্তু বা তালিকা তৈরি করতে চেয়েছিলাম এবং এতে যুক্ত হতে সক্ষম হয়েছি।

এই মন্তব্য সবকিছু পরিবর্তন করে। আপনি জেনেরিক যুক্ত করতে পারবেন না IEnumerable<T>। আপনি যদি ইন্টারফেসের সাথে থাকতে চান তবে আপনাকে এমন System.Collections.Genericএকটি ক্লাস ব্যবহার করতে হবে যা কার্যকর ICollection<T>করে List<T>।


1

মূল কারণটি হ'ল আমরা কোনও ইন্টারফেসের অবজেক্ট তৈরি করতে পারি না, এবং IEnumerable একটি ইন্টারফেস । আমাদের ক্লাসের অবজেক্ট তৈরি করা দরকার যা ইন্টারফেস প্রয়োগ করে। এটিই মূল কারণ যা আমরা সরাসরি আইনিংরেবলের অবজেক্ট তৈরি করতে পারি না।


0

কোনও আইনিউমারেবল কোনও ইন্টারফেস নয়, আপনি ইন্টারফেসের উদাহরণ তৈরি করতে পারবেন না

আপনি এই মত কিছু করতে পারেন

IEnumerable<object> a = new object[0];

@ জন স্কিটির মতো সিওএম ইন্টারফেসের উদাহরণ তৈরি করা সম্ভব?
— আর্সেন এমক্রিচায়ান

একেবারে। অদ্ভুত, তবে সত্য। দেখুন stackoverflow.com/questions/1093536/... এবং msmvps.com/blogs/jon_skeet/archive/2009/07/07/...
— জন স্কিট

4
আমি মনে করি যে সিওএম ইন্টারফেসের পরিবর্তে ইন্টারফেসের পরিবর্তে ইনস্টল করা একটি ডিফল্ট বাস্তবায়ন নির্দিষ্ট করা সম্ভব।
— কোডসইনচওস

@ জোনস্কিট এটি বলা আরও সঠিক নয় যে new SomeComInterface()কলিংটি ইন্টারফেসের সাথে যুক্ত "কোক্লাস" ইনস্ট্যান্ট করে ইন্টারফেসটি নিজেই ইনস্ট্যান্ট করার চেয়ে?
— ফোগ

@ ফুগ: এটি সঠিক হবে - তবে গুরুত্বপূর্ণ এবং বিজোড় বিষয়টি হ'ল newআপনি নির্দিষ্ট পরিস্থিতিতে ইন্টারফেসের সাহায্যে ব্যবহার করতে পারেন ।
— জন স্কিটি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.