তালিকার (টি) এবং সংগ্রহের (টি) মধ্যে পার্থক্য কী?


94

আমি সেগুলি অনেকগুলি একইভাবে ব্যবহার করতে দেখেছি এবং আমি চিন্তিত যে আমি ডিজাইনের এমন কোনও পথে নামতে যাচ্ছি যা আমি যদি আরও ভাল না বুঝতে পারি তবে তা অপরিবর্তনীয়। এছাড়াও, আমি নেট ব্যবহার করছি।

উত্তর:


50

Collection<T>একটি স্বনির্ধারিত মোড়কের প্রায় IList<T>IList<T>সিল না করা অবস্থায় এটি কোনও কাস্টমাইজেশন পয়েন্ট সরবরাহ করে না। Collection<T>এর পদ্ধতিগুলি ডিফল্টরূপে মানক IList<T>পদ্ধতিতে অর্পিত হয় তবে আপনি যা চান সহজেই তা ওভাররাইড করা যায়। আইএললিস্ট Collection<T>দিয়ে সম্পন্ন হতে পারে বলে আমি বিশ্বাস করি না এর মধ্যে ইভেন্টগুলি ওয়্যারআপ করাও সম্ভব ।

সংক্ষেপে, সত্যের পরে এটি প্রসারিত করা অনেক সহজ, যার অর্থ সম্ভবত অনেক কম রিফ্যাক্টরিং হতে পারে।


@ মার্ক গ্র্যাভেল, @ অ্যাডাম লাসেক: আমরা কী পাবলিক অকার্যকর নতুন ইনসার্ট আইটেম (...) দিয়ে ইনসার্ট আইটেম (...) পদ্ধতিটি লুকিয়ে এবং তারপরে বেস.InsertItem (..) এ কল করে একটি তালিকা দিয়ে একই কাজটি করতে পারি না? .) এর মধ্যে থেকেই ? এটি এখনও চুক্তি ভঙ্গ করবে না। (তালিকায় নামটি 'sertোকান' তবে তবুও)। সুতরাং সংগ্রহে <T> আঁকড়ে থাকার মধ্যে বড় চুক্তি কী?
ডিস্ট্যাক ওভারফ্লো

4
@DeeStackOverflow - অর্থাৎ কিছু জন্য সৌন্দর্য যে - কারণ পদ্ধতি লুকানোর সময় একটি বিভিন্ন API ব্যবহার করে যে কোনো কোড দ্বারা ব্যবহার করা হবে না IList, IList<T>, List<T>ইত্যাদি সংক্ষেপে, আপনি কোন ধারণা তা বলা হবে না। পলিমারফিজম এটিকে ঠিক করে।
মার্ক গ্র্যাভেল

@ অ্যাডলাসেকেক: আপনি নিজের উত্তরে ObservableCollection<T>একটি উদাহরণ হিসাবে যুক্ত করতে চাইতে পারেন যেখানে পরিবর্তনের বিষয়ে অবহিত করার জন্য পদ্ধতিগুলি ওভার্রাইড করা হয় ।
কিরণ চালা

90

সি # তে, একটি ব্যাগ অবজেক্টের প্রতিনিধিত্ব করার জন্য তিনটি ধারণা রয়েছে। বৈশিষ্ট্যগুলি বাড়ানোর জন্য, সেগুলি হ'ল:

  • অগণনীয় - আনর্ডারড , অবিরাম পরিবর্তনযোগ্য
  • সংগ্রহ - আইটেমগুলি যুক্ত / সরাতে পারে
  • তালিকা - আইটেমগুলিকে অর্ডার দেওয়ার অনুমতি দেয় (সূচী দ্বারা অ্যাক্সেস এবং অপসারণ)

গণনার কোনও আদেশ নেই। আপনি সেট থেকে আইটেমগুলি যোগ বা সরাতে পারবেন না। এমনকি আপনি সেটে আইটেমের একটি গণনাও পেতে পারেন না। এটি আপনাকে একের পর এক সেটের প্রতিটি আইটেমকে কঠোরভাবে অ্যাক্সেস করতে দেয়।

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

তালিকা হ'ল বস্তুর একটি আদেশযুক্ত সেট। আপনি তালিকাটি বাছাই করতে পারেন, সূচি অনুসারে আইটেমগুলি অ্যাক্সেস করতে পারেন, সূচি অনুসারে আইটেমগুলি সরিয়ে ফেলতে পারেন।

আসলে, এগুলির ইন্টারফেসগুলি দেখার সময় তারা একে অপরকে গড়ে তোলে:

  • interface IEnumerable<T>

    • GetEnumeration<T>
  • interface ICollection<T> : IEnumerable<T>

    • Add
    • Remove
    • Clear
    • Count
  • interface IList<T> = ICollection<T>

    • Insert
    • IndexOf
    • RemoveAt

ভেরিয়েবল বা পদ্ধতি পরামিতি ঘোষণাকালে, আপনার ব্যবহারের পছন্দ করা উচিত

  • সংখ্যক
  • আইকোলিকেশন
  • আমি তালিকা

ধারণার উপর ভিত্তি করে আপনাকে অবজেক্টের সেটটি করতে হবে।

যদি আপনাকে কেবল তালিকার প্রতিটি বস্তুর জন্য কিছু করতে সক্ষম হতে হয় তবে আপনার কেবল প্রয়োজন IEnumerable:

void SaveEveryUser(IEnumerable<User> users)
{
    for User u in users
      ...
}

আপনি গ্রাহ্য না ব্যবহারকারীরা একটি রাখা হয় যদি না List<T>, Collection<T>, Array<T>বা অন্য কিছু। আপনার কেবল IEnumerable<T>ইন্টারফেসের প্রয়োজন ।

যদি আপনাকে কোনও সেটে আইটেমগুলি যোগ করতে, অপসারণ করতে বা গণনা করতে সক্ষম হতে হয় তবে সংগ্রহটি ব্যবহার করুন :

ICollection<User> users = new Collection<User>();
users.Add(new User());

যদি আপনি কোনও সাজানোর অর্ডার সম্পর্কে যত্নশীল হন এবং ক্রমটি সঠিক হওয়ার প্রয়োজন হয় তবে একটি তালিকা ব্যবহার করুন :

IList<User> users = FetchUsers(db);

চার্ট আকারে:

| Feature                | IEnumerable<T> | ICollection<T> | IList<T> |
|------------------------|----------------|----------------|----------|
| Enumerating items      | X              | X              | X        |
|                        |                |                |          |
| Adding items           |                | X              | X        |
| Removing items         |                | X              | X        |
| Count of items         |                | X              | X        |
|                        |                |                |          |
| Accessing by index     |                |                | X        |
| Removing by indexx     |                |                | X        |
| Getting index of item  |                |                | X        |

List<T>এবং Collection<T>System.Collections.Genericদুটি ক্লাস যে এই ইন্টারফেসগুলি বাস্তবায়ন হয়; তবে তারা একমাত্র ক্লাস নয়:

  • ConcurrentBag<T>বস্তুর অর্ডারযুক্ত ব্যাগ ( IEnumerable<T>)
  • LinkedList<T>এমন একটি ব্যাগ যেখানে আপনাকে সূচি ( ICollection) দ্বারা আইটেম অ্যাক্সেস করার অনুমতি দেওয়া হয় না ; তবে আপনি সংগ্রহ থেকে আইটেমগুলি ইচ্ছামত যুক্ত করতে এবং মুছতে পারেন
  • SynchronizedCollection<T> অর্ডার করা সংগ্রহে, যেখানে আপনি সূচি অনুসারে আইটেমগুলি যুক্ত / সরাতে পারবেন

সুতরাং আপনি সহজেই পরিবর্তন করতে পারেন:

IEnumerable<User> users = new SynchronizedCollection<User>();

SaveEveryUser(users);

tl; ডা

  • গণনাযোগ্য - অ্যাক্সেস আইটেমগুলি, সীমাহীন, অবিমোচনীয়
  • সংগ্রহ - সংশোধন করা যেতে পারে (যোগ করুন, মুছুন, গণনা করুন)
  • তালিকা - সূচী দ্বারা অ্যাক্সেস করতে পারেন

আপনার প্রয়োজনীয় ধারণাটি চয়ন করুন , তারপরে ম্যাচিং ক্লাসটি ব্যবহার করুন।


11
ওপি কংক্রিটের প্রকারগুলি সম্পর্কে জিজ্ঞাসা করেছিল এবং আপনি ইন্টারফেসগুলি তুলনা করেছেন। কংক্রিটের ধরণের সংগ্রহ <টি> আইলিস্ট <টি> প্রয়োগ করে এবং সূচক ক্ষমতা দ্বারা অ্যাক্সেস করে।
জেজেএস

4
উত্তরটি ভাল তবে প্রশ্ন থেকে বিচ্যুত হয়েছে Collection আপনার সংগ্রহটি <টি> এবং তালিকা <টি> ক্লাসের জন্য উপযুক্ত নয়, আমি আপনার সম্ভাব্য প্রশ্নটি থেকে বোঝাচ্ছি যদি আমি আপনার পয়েন্টটি বৈধতা দেওয়ার চেষ্টা করি তবে তারা ন্যায়সঙ্গত হয় না। সাধারণ উদ্দেশ্যে উত্তরের জন্য আপনি সঠিক হতে পারেন যে সংগ্রহের আদেশ দেওয়া হয়নি তাই কোনও সূচীকরণ নয়, তবে তালিকাটি আদেশ করা হয়েছে যাতে নির্দিষ্ট সূচীতে সন্নিবেশ সম্ভব।
কিলো রেন

আমার যদি আইকোলিকেশন <T> থেকে বৈশিষ্ট্যগুলিও সল্ট করে সম্ভাব্যতা খুঁজে পেতে চান তবে কী হবে?

4
যদি তালিকাটি অর্ডার করা হয় এবং সংগ্রহটি অর্ডারহীন হয়, তবে এটি কোনও নতুন শিক্ষানবিশকে (আমার মতো) সহজেই বাছাই করতে গাইড করার জন্য একটি বিশাল কার্যকরী পার্থক্য। তবে অপেক্ষা করুন, আপনি কেন বলছেন যে কোনও সংগ্রহের কোনও অর্ডার নেই? এটি সূচিপত্র () এবং সরানআউট () পদ্ধতি সরবরাহ করে, সুতরাং এটি আদেশ করা হয়েছে, তাই না? আমি কি এখানে কিছু মিস করেছি?
রায়লুও

4
@ রায়লুও আমি বিশেষভাবে উল্লেখ করছি ICollection<T>এবং IList<T>। বিভিন্ন কংক্রিট বাস্তবায়ন আলাদাভাবে আচরণ করতে পারে। উদাহরণস্বরূপ, আপনি যদি List<T>তার IEnumerable<T>ইন্টারফেসের মাধ্যমে কোনও অ্যাক্সেস করেন তবে তালিকার আইটেমগুলি যুক্ত করতে, অপসারণ, বাছাই করতে বা গণনা করার কোনও উপায় আপনার নেই।
ইয়ান বয়ড

44

List<T>অ্যাপ্লিকেশন কোডের মধ্যে অভ্যন্তরীণ ব্যবহারের জন্য উদ্দিষ্ট। আপনার গ্রহণযোগ্য বা ফিরে আসার মতো সরকারী API গুলি লেখা এড়ানো উচিত List<T>(পরিবর্তে একটি সুপারক্লাস বা কোনও সংগ্রহ ইন্টারফেস ব্যবহার করার বিষয়ে বিবেচনা করুন)।

Collection<T> কাস্টম সংগ্রহের জন্য একটি বেস ক্লাস পরিবেশন করে (যদিও এটি সরাসরি ব্যবহার করা যেতে পারে)।

আপনার প্রয়োজনে Collection<T>নির্দিষ্ট বৈশিষ্ট্য না থাকলে আপনার কোডটি ব্যবহার করার বিষয়টি বিবেচনা করুন List<T>

উপরেরটি কেবলমাত্র সুপারিশগুলি।

[এর থেকে অভিযোজিত: ফ্রেমওয়ার্ক ডিজাইনের গাইডলাইন, দ্বিতীয় সংস্করণ]


এটি উল্লেখ করার মতো বিষয় যেগুলি কোন ধরণের পরিবর্তনযোগ্য বস্তুগুলি তাদের নিজস্ব রাজ্যে আবদ্ধ করতে ব্যবহার করে সে জাতীয় ধরণের জিনিসগুলি ফেরানো এড়ানো উচিত যদি না প্রশ্নে থাকা বস্তুগুলির পরিবর্তিত হওয়ার সময় তাদের মালিককে অবহিত করার কোনও উপায় না থাকে বা পদ্ধতিটি ফেরত দেওয়ার পদ্ধতিটির নাম থাকে অবজেক্টটি পরিষ্কারভাবে বোঝায় যে এটি একটি নতুন উদাহরণ ফিরে আসছে। লক্ষ্য করুন যেমন একটি জন্য Dictionary<string, List<string>>রিটার্ন List<string>শুধু জরিমানা, যেহেতু অভিধান রাষ্ট্রীয় শুধুমাত্র encapsulates হয় পরিচয় বরং তাদের বিষয়বস্তু চেয়ে তালিকা তাহাতে এর।
সুপারক্যাট

37

List<T>কারণ এটি এখন সম্পূর্ণ খুব বহুমুখী (যেমন কুশলী পদ্ধতি প্রচুর সঙ্গে, একটি খুব সাধারণভাবে দেখা ধারক Sort, Findকিন্তু (উদাহরণস্বরূপ সন্নিবেশ উপর চেক আইটেম,) আপনি আচরণের কোনো ওভাররাইড করতে চান কোন এক্সটেনশন পয়েন্ট আছে -, ইত্যাদি)।

Collection<T>যে কোনও IList<T>(একটি ডিফল্ট List<T>) এর চারপাশে একটি মোড়ক - এটিতে এক্সটেনশন পয়েন্ট ( virtualপদ্ধতি) রয়েছে, তবে অনেকগুলি সমর্থন পদ্ধতি যেমন পছন্দ করে না Find। ইন্ডিরিয়েশনের কারণে এটি তুলনায় কিছুটা ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে কম হয় List<T>না।

LINQ সঙ্গে, অতিরিক্ত পদ্ধতিতে List<T>কম গুরুত্বপূর্ণ হয়ে, যেহেতু LINQ টু অবজেক্টস যাহাই হউক না কেন তাদের প্রদান থাকে ... উদাহরণস্বরূপ First(pred), OrderBy(...)ইত্যাদি


6
সংগ্রহ <টি> লিঙ্ক-টু-অবজেক্টে এমনকি পদ্ধতির পূর্বাভাসের অভাব রয়েছে।
tuinstoel

7
@ টিউনস্টোয়েল - তবে এটি যুক্ত করা তুচ্ছ।
মার্ক গ্রেভেল

12

তালিকা দ্রুত।

উদাহরণস্বরূপ করুন

private void button1_Click(object sender, EventArgs e)
{
  Collection<long> c = new Collection<long>();
  Stopwatch s = new Stopwatch();
  s.Start();
  for (long i = 0; i <= 10000000; i++)
  {
    c.Add(i);
  }
  s.Stop();
  MessageBox.Show("collect " + s.ElapsedMilliseconds.ToString());

  List<long> l = new List<long>();
  Stopwatch s2 = new Stopwatch();
  s2.Start();
  for (long i = 0; i <= 10000000; i++)
  {
    l.Add(i);
  }
  s2.Stop();
  MessageBox.Show("lis " + s2.ElapsedMilliseconds.ToString());


}

আমার মেশিনে List<>প্রায় দ্বিগুণ দ্রুত।

সম্পাদনা করুন

আমি বুঝতে পারি না কেন লোকেরা এটিকে নিম্নচাপ দিচ্ছে। আমার ওয়ার্ক মেশিন এবং আমার হোম মেশিনে উভয়ই তালিকা <> কোডটি 80% দ্রুত।


4
এটা কিভাবে দ্রুত? খুঁজে দেখো? সন্নিবেশ? অপসারণ? সন্ধান? কেন এটি দ্রুত?
ডগ টি।

17
সংগ্রহের চেয়ে টাইপ করার জন্য তালিকা কম অক্ষর :)
রেডফিল্টার

4
সংগ্রহের পদ্ধতি কম রয়েছে। অতএব এটি দ্রুত। কিউইডি (joking, আমি trolling করছি না)
সত্যজিৎ

4
এটি আমার মেশিনে চেষ্টা করেছেন এবং তালিকাটি প্রায় 20% দ্রুত। কেন এটি হতে পারে সে সম্পর্কে কিছু আলোচনায় আগ্রহী হবে। মেমরি বরাদ্দ করার সাথে তালিকার তালিকা আরও ভাল।
রায়

10
তালিকার পদ্ধতিগুলি উত্তরাধিকার সূত্রে প্রাপ্ত নয় তাই তাদের উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছে কিনা তা পরীক্ষা করার জন্য নেই; সংগ্রহের পদ্ধতিগুলি উত্তরাধিকারসূত্রে প্রাপ্ত। সুবিধাটি হ'ল আপনি সংগ্রহটি বেস ক্লাস হিসাবে ব্যবহার করতে পারেন এবং উত্তম কাস্টম সংগ্রহ তৈরি করতে পারেন।
রিচার্ড গ্যাডসডন

11

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


4

এটি সেই গ্রেড স্কুলের প্রশ্নগুলির মধ্যে একটি। টি এর সংগ্রহটি এক প্রকার বিমূর্ত; একটি ডিফল্ট বাস্তবায়ন হতে পারে (আমি কোনও। নেট / সি # লোক নই) তবে সংগ্রহে অ্যাড, রিমুভ, পুনরাবৃত্তি ইত্যাদির মতো প্রাথমিক ক্রিয়াকলাপ থাকবে।

টি-এর তালিকাটি এই ক্রিয়াকলাপগুলির সম্পর্কে কিছু সুনির্দিষ্ট বোঝায়: যুক্ত হওয়াতে ধ্রুব সময় নেওয়া উচিত, সরানো উচিত উপাদানগুলির সংখ্যার সাথে সমানুপাতিক সময় নেওয়া উচিত, গেটফার্স্ট কনসেন্ট সময় হওয়া উচিত। সাধারণভাবে, একটি তালিকা এক ধরণের সংগ্রহ, তবে সংগ্রহটি এক প্রকারের তালিকা নয়।


4

হ্যানসেলম্যান স্পিকার : " Collection<T>তালিকার মতো দেখতে এটির List<T>অভ্যন্তরীণভাবেও রয়েছে EV প্রতিটি একক পদ্ধতি অভ্যন্তরীণভাবে প্রতিনিধিত্ব করে List<T>It এটির মধ্যে একটি সুরক্ষিত সম্পত্তি রয়েছে যা প্রকাশ করে List<T>।"

সম্পাদনা: Collection<T>সিস্টেমের মধ্যে নেই en জেনেরিক.কলেকশনস। নেট 3.5। আপনি .NET 2.0 থেকে 3.5 এ স্থানান্তরিত হয়ে যদি আপনি প্রচুর Collection<T>অবজেক্ট ব্যবহার করেন তবে আপনাকে কিছু কোড পরিবর্তন করতে হবে , যদি না আমি স্পষ্ট কিছু মিস করছি ...

সম্পাদনা 2: Collection<T>এখন সিস্টেমে রয়েছে Col সংগ্রহগুলি.অবজেক্টমোডেল নেট স্পেস .NET 3.5 এ। সহায়তা ফাইলটি এটি বলে:

"সিস্টেম.কালেকশনস.অজেক্টমোডেল নেমস্পেসে এমন ক্লাস রয়েছে যা একটি পুনরায় ব্যবহারযোগ্য লাইব্রেরির অবজেক্ট মডেলে সংগ্রহ হিসাবে ব্যবহার করা যেতে পারে properties


4

এই সমস্ত ইন্টারফেসের উত্তরাধিকার সূত্রে প্রাপ্ত IEnumerable, যা আপনার নিশ্চিত হওয়া উচিত understand এই ইন্টারফেসটি মূলত আপনাকে পূর্ববর্তী বিবৃতিতে ক্লাসটি ব্যবহার করতে দেয় (সি # তে)।

  • ICollectionআপনার তালিকাভুক্ত ইন্টারফেসগুলির মধ্যে সবচেয়ে বেসিক। এটি একটি প্রচুর পরিমাণে ইন্টারফেস যা এটি সমর্থন করে Countএবং এটি প্রায়।
  • IListএটি হ'ল সমস্ত ICollectionকিছু, তবে এটি আইটেম যুক্ত এবং অপসারণকে সমর্থন করে, সূচক অনুসারে আইটেমগুলি পুনরুদ্ধার করা ইত্যাদি It's এটি "অবজেক্টের তালিকার" জন্য সর্বাধিক ব্যবহৃত ইন্টারফেস, যা আমি জানি অস্পষ্ট।
  • IQueryableলিনকু সমর্থন করে এমন একটি গণনাযোগ্য ইন্টারফেস। আপনি সর্বদা IQueryableএকটি আইলিস্ট থেকে একটি তৈরি করতে পারেন এবং অবজেক্টগুলিতে লিনকিউ ব্যবহার করতে পারেন, তবে আপনি IQueryableলিনকুতে এসকিউএল এবং এসকিউএল থেকে লিনকুতে সত্তা থেকে এসকিউএল স্টেটমেন্টগুলির স্থগিত সম্পাদনের জন্যও ব্যবহার করতে পারেন ।
  • IDictionaryঅর্থে এটি একটি পৃথক প্রাণী যে এটি মূল্যবোধের অনন্য কীগুলির ম্যাপিং। আপনি কী / মান জোড়গুলি গণনা করতে পারবেন এটিও অপরিমেয় তবে অন্যথায় এটি আপনি তালিকাভুক্ত অন্যদের চেয়ে আলাদা উদ্দেশ্যে কাজ করে

ICollection সমর্থন যোগ / অপসারণ / ক্লিয়ারিং: msdn.microsoft.com/en-us/library/...
স্মৃতিভ্রংশ

4

দুটিই MSDN, তালিকা (t -এর) অনুযায়ী .Add "একটি হে (ঢ) অপারেশন" (যখন "ক্যাপাসিটি" ছাড়িয়ে করা হয়) থাকে তখন এটি সংগ্রহ (এর টি) .Add হয় সবসময় "একটি হে (1) অপারেশন"। এটি অ্যারে এবং লিঙ্কযুক্ত তালিকা সংগ্রহের মাধ্যমে তালিকাটি প্রয়োগ করা হলে তা বোধগম্য হবে। যাইহোক, যদি এটি হয়ে থাকে তবে কেউ সংগ্রহ (অফ টি) সংগ্রহের প্রত্যাশা করতে পারে tem এটি "একটি ও (এন) অপারেশন" হবে। কিন্তু - এটি - না !?! সংগ্রহ (টি অফ)। আইটেমটি হ'ল তালিকার (টি) এর মতো "একটি ও (1) অপারেশন" tem আইটেম।

তার উপরে, "টিউনস্টোয়েল" এর "29 ডিসেম্বর '08 তে 22:31" উপরে দাবি করা গতি পরীক্ষার তালিকাগুলি তালিকা দেখায় (টি)। দীর্ঘ এবং স্ট্রিংস। যদিও আমি কেবলমাত্র তার দাবী 80% এর তুলনায় আমি মাত্র ~ 33% দ্রুত পেয়েছি, এমএসডিএন অনুসারে, এর বিপরীত ও "এন" বার হওয়া উচিত!!


3

উভয়ই একই ইন্টারফেস প্রয়োগ করে, তাই তারা একইভাবে আচরণ করবে। সম্ভবত এগুলি অভ্যন্তরীণভাবে আলাদাভাবে প্রয়োগ করা হয়েছে তবে এটি পরীক্ষা করতে হবে।

আমি দেখতে পাই কেবলমাত্র আসল পার্থক্য Collection<T>হ'ল নেমস্পেস এবং সত্য যেটি চিহ্নিত করা হয়েছে ComVisibleAttribute(false), তাই COM কোড এটি ব্যবহার করতে পারে না।


তারা বিভিন্ন ইন্টারফেস প্রয়োগ করে - তালিকা <T> প্রয়োগ করে IList <T>, যেখানে সংগ্রহ <টি> না।
বেভান

@ বেভান সি-তে এটি চেষ্টা করুন, তারা উভয়ই একই ইন্টারফেসের সেটটি প্রয়োগ করেন
কিলো রেন ২ '

4
এটা একটা মজার পরিবর্তন @KyloRen - তারা কি এখন উভয় ইন্টারফেস একই সেট বাস্তবায়ন; এটি '08-এ ফিরে আসেনি।
বেভান

4
@ বিভান আকর্ষণীয় নিশ্চিত না যে দুটি ভিন্ন শ্রেণির কারণ কী ছিল, একটি মাত্র কয়েকটি অতিরিক্ত পদ্ধতি সহ।
কিলো রেন

3

অন্যান্য asnwers ছাড়াও, আমি জেনেরিক তালিকা এবং সংগ্রহের ক্ষমতাগুলির দ্রুত ওভারভিউ সংকলন করেছি। সংগ্রহ তালিকার সীমিত উপসেট:

* = উপস্থিত
o = আংশিকভাবে উপস্থিত

সম্পত্তি / পদ্ধতি সংগ্রহ <টি> তালিকা <টি>
----------------------------------------------
Add()                *              *
AddRange()                          *
AsReadOnly()                        *
BinarySearch()                      *
Capacity                            *
Clear()              *              *
Contains()           *              *
ConvertAll()                        *
CopyTo()             o              *
Count                *              *
Equals()             *              *
Exists()                            *
Find()                              *
FindAll()                           *
FindIndex()                         *
FindLast()                          *
FindLastIndex()                     *
ForEach()                           *
GetEnumerator()      *              *
GetHashCode()        *              *
GetRange()                          *
GetType()            *              *
IndexOf()            o              *
Insert()             *              *
InsertRange()                       *
Item()               *              *
LastIndexOf()                       *
New()                o              *
ReferenceEquals()    *              *
Remove()             *              *
RemoveAll()                         *
RemoveAt()           *              *
RemoveRange()                       *
Reverse()                           *
Sort()                              *
ToArray()                           *
ToString()           *              *
TrimExcess()                        *
TrueForAll()                        *
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.