.NET 4.0-এ কেবল পঠনযোগ্য তালিকা বা অবিশ্বাস্য তালিকা


100

আমি যা বলতে পারি তা থেকে, .NET 4.0 এ এখনও কেবল পঠনের তালিকা নেই। কাঠামোর কেন এখনও এই কার্যকারিতাটির অভাব রয়েছে? এটি কি ডোমেন-চালিত ডিজাইনের কার্যকারিতার এক সাধারণ টুকরো নয় ?

জাভাতে সি # এর উপরে থাকা কয়েকটি সুবিধাগুলির মধ্যে একটি হ'ল এটি কালেকশনস.অনোমডিফিকেশনযোগ্য তালিকা (তালিকা) আকারে পদ্ধতি যা মনে হয় এটি IList <T> বা তালিকা <T> এ দীর্ঘ ছাড়িয়ে গেছে।

ব্যবহার করা IEnumerable<T>হচ্ছে প্রশ্নের সহজ সমাধান - ToListব্যবহার করা যেতে পারে এবং একটি অনুলিপি প্রদান করে।


মনে হয় সত্যিকারের পঠন করার একমাত্র আসল উপায়টি List<T>আপনার নিজের লেখা, আমার জানা ক্লাসে এমন কোনও বিল্ট নেই যা আমার জানা আছে যেগুলি " লিংক কোয়েরি ইত্যাদি " List<T>বাক্সের বাইরে থাকা সমস্ত "পঠনযোগ্য কেবলমাত্র" বৈশিষ্ট্যকে সমর্থন করে Containsetc.

উত্তর:


146

আপনি খুঁজছেন ReadOnlyCollection, যা .NET2 সাল থেকে প্রায় ছিল।

IList<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = new ReadOnlyCollection<string>(foo);

অথবা

List<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = foo.AsReadOnly();

এটি কেবল পঠনযোগ্য ভিউ তৈরি করে, যা মোড়ানো সংগ্রহের পরিবর্তনগুলি প্রতিবিম্বিত করে।


1
আমি এখন এই প্রশ্নটি জিজ্ঞাসা করে কিছুটা বোকা বোধ করছি - এবং ReadOnly Colલેક્શન সম্পর্কে জানা নেই
ক্রিস এস

54
হবেন না - আমিও একই জিনিসটির সন্ধান করতে গিয়ে আপনার প্রশ্নটি খুঁজে পেলাম না
রোল্যান্ড ট্যাপ

9
এটি খুঁজে পাওয়া একটি বিরক্তিকর শক্ত ক্লাস। এটি সিস্টেমে রয়েছে। সংগ্রহসমূহ.অজেক্টমোডেল নেমস্পেসের পরিবর্তে সিস্টেম.কলেশন.জেনারিক যেখানে আমি এটি খুঁজে পেতে আশা করব। আমি মনে করি এটি কারণ কারণ জেনেরিক নেমস্পেসের অস্তিত্বের আগেই এটি ছিল। তবুও আমি আশা করব যে বেস ক্লাসটি অবজেক্টমোডেলে থাকবে এবং জেনেরিক ক্লাসটি জেনেরিতে যুক্ত হবে। আমি মনে করি তাদের কারণ আছে তবে আমি এটি বিরক্তিকর বলে মনে করি।
BlueMonkMN

5
@ ব্লুমোনকএমএন: সংগ্রহ থেকে এটি আলাদা কেন হয় তা জানতে দয়া করে এই নিবন্ধটি দেখুন। জেনেরিক নেমস্পেস।
উচিথা

7
তবে এটি কোনও তালিকা নয়, এটি একটি সংগ্রহ। সুতরাং আপনি যদি এটি ব্যবহার করেন তবে আপনার তালিকার পরিবর্তে সংগ্রহটি ব্যবহার করার জন্য আপনার সমস্ত কোডটি পরিবর্তন করতে হবে।
রোমান জ্যাবিকি

13

যারা ইন্টারফেস ব্যবহার করতে পছন্দ করেন তাদের জন্য: .NET 4.5 জেনেরিক IReadOnlyListইন্টারফেস যুক্ত করে যা প্রয়োগ করা হয়List<T> উদাহরণস্বরূপ ।

এটি অনুরূপ IReadOnlyCollectionএবং একটি সূচক Itemসম্পত্তি যুক্ত করে।



11

তালিকার সর্বাধিক সাধারণ প্যাটার্নটি যদি সমস্ত উপাদানগুলির মাধ্যমে পুনরাবৃত্তি হয়, IEnumerable<T>বা IQueryable<T>কার্যকরভাবে কেবল পঠনযোগ্য তালিকা হিসাবে কাজ করতে পারে।


4
আপনি যদি আপনার তালিকাটি একটি অপ্রয়োজনীয় হিসাবে প্রকাশ করেন তবে গ্রাহক সহজেই এটিকে তালিকায় ফিরিয়ে দিতে এবং পরিবর্তন করতে পারবেন।
জুলিয়ানআর

4
অবশ্যই, তবে এটি বুলেটপ্রুফ পরিমাপের উদ্দেশ্যে নয় - আপনি সম্ভবত ব্যক্তিগত ক্ষেত্রগুলি পড়তে পারেন এবং মূল তালিকাটি সন্ধান করতে পারেন। এটি কেবলমাত্র পঠনযোগ্য হওয়া উচিত সেই উদ্দেশ্যটি বর্ণনা করার মতো এটি আরও বেশি।
আনা বেটস

5
আপনি যে ToList()কোনও একটি কল করেই মূল তালিকাটি পরিবর্তন করছেন না , কেবল একটি অনুলিপি
ক্রিস এস

নোট করুন যে IEnumerable"কেবল পঠনযোগ্য" পদ্ধতির সম্পূর্ণ সেট নয়, উদাহরণস্বরূপ এটিতে এর মতো পদ্ধতিগুলি নেই Contains

8

2.0 তে আপনি AsReadOnlyতালিকার পঠনযোগ্য সংস্করণটি পেতে কল করতে পারেন । অথবা IListএকটি ReadOnlyCollection<T>অবজেক্টের মধ্যে একটি বিদ্যমান মোড়ানো ।


এটি আমার পরে
ক্রিস এস

আমি এটি নেট 4 এ মিস করেছি কারণ আমি সত্য তালিকার <T> পরিবর্তে IList <T> ব্যবহার করছিলাম। নিশ্চিত হয়ে নিন যে AsReadOnly এখনও .NET 4 এ উপলব্ধ is
BlueMonkMN

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