পরিবর্তে পদ্ধতিতে স্বাক্ষর ব্যবহার IReadOnlyCollection<T>
বা ব্যবহার করাIReadOnlyList<T>
IEnumerable<T>
করার ক্ষেত্রে স্পষ্ট করে বলার সুবিধা রয়েছে যে আপনাকে পুনরাবৃত্ত হওয়ার আগে গণনাটি পরীক্ষা করতে হবে, বা অন্য কোনও কারণে একাধিকবার পুনরাবৃত্তি করতে হবে।
তবে তাদের একটি বিশাল নেতিবাচক সমস্যা রয়েছে যা আপনি যদি আপনার কোডটিকে ইন্টারফেসগুলি ব্যবহার করার জন্য পুনরায় ব্যবহারের চেষ্টা করেন, উদাহরণস্বরূপ এটিকে আরও পরীক্ষামূলক এবং গতিশীল প্রক্সিংয়ের জন্য বন্ধুত্বপূর্ণ করার জন্য। মূল বক্তব্যটি হ'ল IList<T>
উত্তরাধিকার সূত্রে প্রাপ্ত নয়IReadOnlyList<T>
এবং একইভাবে অন্যান্য সংগ্রহ এবং তাদের কেবল পঠনযোগ্য ইন্টারফেসগুলির জন্য। (সংক্ষেপে এটি হ'ল। নেট ET.৪ পূর্ববর্তী সংস্করণগুলির সাথে এবিআইয়ের সামঞ্জস্য রাখতে চেয়েছিল that তবে তারা এটি নেট নেটওয়ার্কে পরিবর্তনের সুযোগও নেন নি ))
এর অর্থ হ'ল যদি আপনি IList<T>
প্রোগ্রামটির কিছু অংশ থেকে একটি পেয়ে থাকেন এবং এটি অন্য অংশে পাস করতে চান যা একটি প্রত্যাশা করে IReadOnlyList<T>
, আপনি পারবেন না! আপনি যাইহোক একটি IList<T>
হিসাবে পাস করতে পারেনIEnumerable<T>
।
শেষে, IEnumerable<T>
সমস্ত সংগ্রহ ইন্টারফেস সহ সমস্ত .NET সংগ্রহ দ্বারা সমর্থিত একমাত্র পঠনযোগ্য ইন্টারফেস। অন্য কোনও বিকল্প আপনাকে কামড়ানোর জন্য ফিরে আসবে কারণ আপনি বুঝতে পেরেছেন যে আপনি কোনও স্থাপত্য পছন্দ থেকে নিজেকে আটকিয়ে রেখেছেন। সুতরাং আমি মনে করি যে এটি সুনির্দিষ্টভাবে ফাংশন স্বাক্ষরগুলিতে ব্যবহার করার জন্য যে আপনি কেবলমাত্র পঠনযোগ্য সংগ্রহ চান তা প্রকাশ করুন।
(দ্রষ্টব্য যে আপনি সর্বদা একটি IReadOnlyList<T> ToReadOnly<T>(this IList<T> list)
এক্সটেনশন পদ্ধতি লিখতে পারেন যা অন্তর্নিহিত প্রকারটি উভয় ইন্টারফেসকে সমর্থন করে তবে সাধারণ কাস্ট করে, তবে রিফ্যাক্টরিংয়ের সময় আপনাকে সর্বত্র এটি যুক্ত করতে হবে, যেখানে IEnumerable<T>
সর্বদা সামঞ্জস্যপূর্ণ is)
সর্বদা এটি নিখুঁত নয়, আপনি যদি ডাটাবেস-ভারী কোড লিখতে থাকেন যেখানে দুর্ঘটনাযুক্ত একাধিক গণনা বিপর্যয় দেখা দেয় তবে আপনি অন্য কোনও বাণিজ্য-বাণিজ্য পছন্দ করতে পারেন।