List.AddRange()বিদ্যমান, কিন্তু IList.AddRange()নেই।
এটি আমাকে বিজোড় হিসাবে আঘাত করে। এর পিছনে কারণ কী?
List.AddRange()বিদ্যমান, কিন্তু IList.AddRange()নেই।
এটি আমাকে বিজোড় হিসাবে আঘাত করে। এর পিছনে কারণ কী?
উত্তর:
কারণ একটি ইন্টারফেস চিৎকার কার্যকর করতে সহজ হতে পারে এবং "রান্নাঘর ছাড়া সমস্ত কিছু" না থাকে। আপনি যদি যোগ করেন তবে আপনাকে যুক্ত AddRangeকরতে হবে InsertRangeএবং RemoveRange(প্রতিসাম্যের জন্য)। আরও ভাল প্রশ্ন হ'ল কেন IList<T>ইন্টারফেসের মতো ইন্টারফেসের জন্য এক্সটেনশন পদ্ধতি নেই IEnumerable<T>। (জন্য ইন-জায়গা এক্সটেনশন পদ্ধতি Sort, BinarySearch... উপযোগী হতে হবে)
IFoo) কোনও "সহায়ক" নামস্থান নির্দিষ্টকরণ (যেমন ) ঘোষণার জন্য কোনও উপায় ছিল না ( যেমন MyAssembly) যদি কোনও শ্রেণি প্রয়োগের দাবি করে IFooতবে পদ্ধতির অভাব থাকে int Bar(String)তবে সংকলকটি স্বয়ংক্রিয়- উত্পন্ন পদ্ধতি int IFoo.Bar(String p1) {return MyAssembly.ClassHelpers.IFoo.Bar(this, p1);} যদি এ জাতীয় বৈশিষ্ট্যটি উপস্থিত থাকে, তবে ইন্টারফেসে আরও অনেকগুলি পদ্ধতি অন্তর্ভুক্ত AddRangeকরতে পারে যা বেস আচরণের ক্ষেত্রে প্রয়োগ করা যেতে পারে, তবে কিছু বাস্তবায়ন সংশোধন করতে পারে।
আইএলিস্টে যারা "অ্যাডরেঞ্জ", "বাছাই করুন", ... এর এক্সটেনশন পদ্ধতি থাকতে চান তাদের জন্য,
নীচে AddRangeএক্সটেনশন পদ্ধতিটি রয়েছে:
public static void AddRange<T>(this IList<T> source, IEnumerable<T> newList)
{
if (source == null)
{
throw new ArgumentNullException(nameof(source));
}
if (newList == null)
{
throw new ArgumentNullException(nameof(newList));
}
if (source is List<T> concreteList)
{
concreteList.AddRange(newList);
return;
}
foreach (var element in newList)
{
source.Add(element);
}
}
আমি একটি ছোট লাইব্রেরি তৈরি করেছি যা এটি করে। আমি প্রতিটি প্রকল্পে এটির এক্সটেনশন পদ্ধতিগুলি পুনরায় করার চেয়ে আরও কার্যকর বলে মনে করি।
কিছু পদ্ধতি তালিকার চেয়ে ধীর হলেও তারা কাজটি করে।
তাদের আগ্রহের জন্য এখানে গিটহাব রয়েছে:
AddRange/RemoveRange/InsertRangeসরাসরি "অভ্যন্তরীণ" সংগ্রহের উপর কাজ করতে পারে এবংCapacityপরিচালনাটিকে অনুকূলArray.Copyকরতে পারে এবং ডেটাগুলির ব্লকগুলি ঘুরে দেখার মতো পদ্ধতিগুলি ব্যবহার করতে পারে। একটি এক্সটেনশান পদ্ধতিRemoveRangeসম্ভবত তুলনায় ধীর magniture একটি আদেশ হবেList.RemoveRange