প্রকারটি IEnumerable<T>
এই জাতীয় ক্রিয়াকলাপ সমর্থন করে না। IEnumerable<T>
ইন্টারফেসের উদ্দেশ্য হ'ল গ্রাহককে কোনও সংগ্রহের বিষয়বস্তু দেখার অনুমতি দেওয়া। মানগুলি পরিবর্তন করতে নয়।
আপনি যখন .ToList মত অপারেশন না ()। যোগ করুন () যদি আপনি একটি নতুন তৈরি করছেন List<T>
এবং যে তালিকায় একটি মান যোগ। এটির মূল তালিকার কোনও সংযোগ নেই।
আপনি যা করতে পারেন তা হ'ল IEnumerable<T>
যুক্ত মান সহ একটি নতুন তৈরি করতে এক্সটেনশন পদ্ধতি যুক্ত করুন।
items = items.Add("msg2");
এমনকি এই ক্ষেত্রে এটি আসল IEnumerable<T>
বস্তুটি সংশোধন করবে না । এটিতে একটি রেফারেন্স রেখে এটি যাচাই করা যেতে পারে। উদাহরণ স্বরূপ
var items = new string[]{"foo"};
var temp = items;
items = items.Add("bar");
এই ক্রিয়াকলাপের পরে চলক টেম্প কেবল মানগুলির সেটে কেবল একটি একক উপাদান "foo" এর সাথে একটি গণনাযোগ্য রেফারেন্স দেবে যখন আইটেমগুলি "foo" এবং "বার" এর সাথে পৃথক গণনার উল্লেখ করবে।
সম্পাদনা
আমি দৃts়তার সাথে ভুলে যাচ্ছি যে অ্যাড কোনও সাধারণ এক্সটেনশন পদ্ধতি নয় IEnumerable<T>
কারণ এটি প্রথমটি যা আমি সংজ্ঞায়িত করি। এটা এখানে
public static IEnumerable<T> Add<T>(this IEnumerable<T> e, T value) {
foreach ( var cur in e) {
yield return cur;
}
yield return value;
}
IEnumerable<T>
শুধুমাত্র সংগ্রহ অনুসন্ধানের জন্য বোঝানো হয়েছে। এটি লিনকিউ কাঠামোর জন্য মেরুদণ্ড। এটা সবসময় যেমন কিছু অন্যান্য সংগ্রহের বিমূর্ততা হয়Collection<T>
,List<T>
অথবাArray
। ইন্টারফেসটি কেবল এমনGetEnumerator
পদ্ধতি সরবরাহ করে যা এমন একটি উদাহরণ দেয়IEnumerator<T>
যা প্রসারণযোগ্য সংগ্রহের ওয়াকিংকে একবারে সক্ষম করে। লিনকিউ এক্সটেনশন পদ্ধতিগুলি এই ইন্টারফেসের মাধ্যমে সীমাবদ্ধ।IEnumerable<T>
এটি পড়ার জন্য ডিজাইন করা হয়েছে কারণ এটি একাধিক সংগ্রহের অংশগুলির একত্রিতাকে উপস্থাপন করতে পারে।