IList <T> এর পরিবর্তে আমি কি সর্বদা আইনিংরেবল <T> ফিরিয়ে আনতে পারি?


98

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

public IEnumerable<FooBar> GetRecentItems()

বা

public IList<FooBar> GetRecentItems()

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


4
আপনি কি জিজ্ঞাসা করছেন এটি <T> বা IList <T> তালিকা? শিরোনাম এবং প্রশ্ন ভিন্ন জিনিস বলছে ...
ফ্রেডরিক Mork

যখনই সম্ভব ইউজার ইন্টারফেস আইনিউবারেবল বা ক্যানক্রিট টাইপের ইনস্টল ইডলিস্ট।
উসমান মাসউদ

4
আমি সংগ্রহ <<< তালিকা হিসাবে ফিরে আসছি। IEnumbeable <T> ফিরিয়ে দেওয়ার প্রয়োজনটি আমি দেখতে পাচ্ছি না যেহেতু আপনি তালিকা থেকে এটি বের করতে পারেন <T>
চক কনওয়ে


উত্তর:


45

আপনি কেন সেই নির্দিষ্ট ইন্টারফেসটি ব্যবহার করছেন তা নির্ভর করে।

উদাহরণস্বরূপ, IList<T>বেশ কয়েকটি পদ্ধতি রয়েছে যা এতে উপস্থিত নেই IEnumerable<T>:

  • IndexOf(T item)
  • Insert(int index, T item)
  • RemoveAt(int index)

এবং বৈশিষ্ট্য:

  • T this[int index] { get; set; }

আপনার যদি কোনও পদ্ধতিতে এই পদ্ধতিগুলির প্রয়োজন হয় তবে সমস্ত উপায়ে ফিরে আসুন IList<T>

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


4
@ জোন এফডিজি সংগ্রহের সংগ্রহের জন্য <T> বা রিডইনক্লিকেশন <টি> ব্যবহারের প্রস্তাব দেয় যাতে আমার উত্তর দেখুন।
স্যাম জাফরান

আপনি "এটি সিএলআর সংরক্ষণ করবে" বললে আপনার শেষ বাক্যে আপনি কী বোঝাতে চেয়েছেন তা পরিষ্কার নয়। আইইনুমেবল বনাম আইলিস্ট ব্যবহার করে এটি কী সংরক্ষণ করবে? আপনি কি আরও পরিষ্কার করতে পারেন?
PositiveGuy

4
@ কফিএডিক্ট্ট এই উত্তরটির তিন বছর পরে আমি মনে করি আপনি ঠিক বলেছেন - শেষ অংশটি অস্পষ্ট। যদি কোনও পদ্ধতি যা আইলিস্টের প্রত্যাশা করে <টি> একটি প্যারামিটার হিসাবে একটি আইনিউমেন্টেবল <T> আইনাম্যুরবেল ম্যানুয়ালি একটি নতুন তালিকা <টি> বা অন্য আইলিস্ট <টি> প্রয়োগকারীতে আবৃত করতে হবে, এবং সেই কাজটি দ্বারা সম্পন্ন হবে না আপনার জন্য সিএলআর। বিপরীত - একটি আইনিউনামেবল <T> আইলিস্ট <T> পাওয়ার প্রত্যাশার একটি পদ্ধতিতে কিছুটা আনবক্সিং করতে হতে পারে তবে হিটসাইটিংয়ের প্রয়োজন হতে পারে না কারণ আইএললিস্ট <T> আইমনুমারেবল <T> প্রয়োগ করে।
জন লিমাজাপ

69

ফ্রেমওয়ার্ক ডিজাইনের গাইডলাইনগুলি ক্লাস কালেকশনটি ব্যবহার করার পরামর্শ দিচ্ছে যখন আপনাকে কেবল পঠন সংগ্রহের জন্য কলার বা রিডইনক্লিকেশন দ্বারা সংশোধনযোগ্য কোনও সংগ্রহ ফিরিয়ে নিতে হবে ।

কারণ এই একটি সহজ পছন্দের IListযে IListযদি তার শুধুমাত্র বা পড়তে আহ্বানকারী অবহিত করে না।

আপনি যদি এর IEnumerable<T>পরিবর্তে ফিরিয়ে দেন তবে কিছু অপারেশন কলকারী সম্পাদন করতে একটু কৌশলযুক্ত হতে পারে। এছাড়াও আপনি কলারকে আর কালেকশনটি সংশোধন করতে নমনীয়তা দেবেন না, এমন কিছু যা আপনি চাইবেন বা নাও চান।

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

ব্যক্তিগতভাবে, একটি ওআরএমের জন্য আমি সম্ভবত Collection<T>আমার ফেরতের মান হিসাবে আটকে থাকব।


14
সংগ্রহগুলি নির্দেশিকা DOS এবং DONTs আরো বিস্তারিত তালিকা ধারণ করে।
চকোটায়ে

27

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

আপনার যা প্রয়োজন তা আলগা করুন এবং আপনি যা সরবরাহ করেন তাতে স্পষ্ট হন।


4
আমি বিপরীত সিদ্ধান্তে পৌঁছেছি: যে নির্দিষ্ট ব্যক্তিকে গ্রহণ করা উচিত, এবং সাধারণ ধরণগুলি ফিরিয়ে দেওয়া উচিত। আপনি সম্ভবত সঠিক হতে পারেন যে আরও বিস্তৃত পদ্ধতির চেয়ে আরও বিস্তৃতভাবে প্রয়োগযোগ্য পদ্ধতিগুলি আরও ভাল। আমি এই সম্পর্কে আরও চিন্তা করতে হবে।
ডেভ কাজিনো

4
ইনপুট হিসাবে সাধারণ ধরণের গ্রহণযোগ্যতা যুক্তি হ'ল এটি আপনাকে কোনও উপাদান থেকে যতটা সম্ভব পুনঃব্যবহার করার জন্য সম্ভাব্য ইনপুটটির বিস্তৃত পরিসরের সাথে কাজ করার অনুমতি দেয়। অন্যদিকে, যেহেতু আপনি ইতিমধ্যে জানেন যে আপনি কী ধরণের জিনিস ব্যবহার করেছেন তা মাস্ক করার তেমন কোনও তাত্পর্য নেই।
মেল

4
আমি মনে করি আমি আরও সাধারণ পরামিতি থাকার সাথে একমত, তবে সাধারণ কিছু কম ফেরার জন্য আপনার যুক্তি কী?
ডেভ কাজিনো

7
ঠিক আছে, আমাকে এই অন্যভাবে চেষ্টা করুন। আপনি কেন তথ্য ফেলে দেবেন? যদি আপনি কেবল ফলাফলটি আইনুমেবল <টি> হওয়ার বিষয়ে চিন্তা করেন তবে এটি কোনও আইলিস্ট <T>? না, তা হয় না। এটি কিছু ক্ষেত্রে অতিরিক্ত ব্যবহারের তথ্য হতে পারে তবে এটি আপনার কোনও ক্ষতি করে না। এখন সুবিধার জন্য। আপনি যদি কোনও তালিকা বা আইলিস্ট ফিরিয়ে দেন তবে আমি তাত্ক্ষণিকভাবে বলতে পারি যে সংগ্রহটি ইতিমধ্যে পুনরুদ্ধার করা হয়েছে, এমন একটি বিষয় যা আমি একটি আইনেম্যারেবলের সাথে জানতে পারি না। এটি হতে পারে বা দরকারী তথ্য নাও হতে পারে তবে আবার, আপনি কেন তথ্য ফেলে দেবেন? আপনি যদি কিছু সম্পর্কে অতিরিক্ত তথ্য জানেন তবে তা পাস করুন।
মেল

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

23

এটা নির্ভর করে...

সর্বনিম্ন উদ্ভূত প্রকারের ( IEnumerable) রিটার্নিং আপনাকে ট্র্যাকের নীচে অন্তর্নিহিত বাস্তবায়নটি পরিবর্তন করতে সর্বাধিক প্রস্থান করবে।

আরও উদ্ভূত প্রকার ( IList) ফিরিয়ে দেওয়া আপনার এপিআই এর ব্যবহারকারীদের ফলাফলের উপর আরও বেশি ক্রিয়াকলাপ সরবরাহ করে।

আমি সর্বদা সর্বনিম্ন উদ্ভূত প্রকারটি ফিরে আসার পরামর্শ দেব যা আপনার ব্যবহারকারীদের প্রয়োজনীয় সমস্ত অপারেশন রয়েছে ... সুতরাং মূলত, আপনাকে প্রথমে এটি নির্ধারণ করতে হবে যে আপনি যে API এর সংজ্ঞা দিচ্ছেন তার প্রসঙ্গে ফলাফলের ক্রিয়াকলাপগুলি কী বোঝায়।


এটি অন্যান্য পদ্ধতির ক্ষেত্রেও প্রযোজ্য কারণ সাধারণ জেনেরিক উত্তর।
ব্যবহারকারী420667

4
আমি জানি এই উত্তরটি খুব পুরানো ... তবে এটি ডকুমেন্টেশনের বিপরীতে বলে মনে হচ্ছে: "যদি আইডিয়োরিয়াল <টি কে, টিভিয়াল> ইন্টারফেস বা আইলিস্ট <T> ইন্টারফেস না হয় প্রয়োজনীয় সংগ্রহের প্রয়োজনীয়তা পূরণ করে, তবে নতুন সংগ্রহের ক্লাসটি সংগ্রহ করুন আইকোলিকেশন <T> ইন্টারফেস পরিবর্তে আরও নমনীয়তার জন্য "এটি বোঝা যাচ্ছে যে আরও উত্পন্ন ধরণের পছন্দ করা উচিত। ( Msdn.microsoft.com/en-us/library/92t2ye13(v=vs.110).aspx ) \
DeborahK

14

একটি বিষয় বিবেচনা করার বিষয় হ'ল যদি আপনি আপনার উত্সর্গের জন্য একটি স্থগিত-কার্যকর এক্সপ্লোর পরিচালনা লিংক বিবৃতিটি ব্যবহার করেন IEnumerable<T>, .ToList()আপনি আপনার পদ্ধতি থেকে ফিরে আসার আগে কল করার অর্থ আপনার আইটেমগুলি পুনরায় পুনরুক্ত করা যেতে পারে - একবার তালিকা তৈরি করতে, এবং একবার কলার যখন লুপ করে যায় , ফিল্টার বা আপনার রিটার্ন মান রূপান্তর। ব্যবহারিক প্রয়োগ করার পরে, আমি লাইনকিউ-টু-অবজেক্টের ফলাফলগুলিকে একটি কংক্রিটের তালিকা বা অভিধানে রূপান্তর করা এড়াতে চাই না যতক্ষণ না আমার। যদি আমার কলারের কোনও তালিকার প্রয়োজন হয়, তবে এটি একক সহজ পদ্ধতি কল করে চলে যাবে - তাদের জন্য আমার সেই সিদ্ধান্ত নেওয়ার দরকার নেই, এবং যে ক্ষেত্রে কলার কেবল ভবিষ্যদ্বাণী করছেন সে ক্ষেত্রে আমার কোডটি আরও দক্ষ করে তোলে।


@ জোয়েল মুয়েলার, আমি সাধারণত তাদের উপর টোলিস্ট () বলি call আমি সাধারণত আমার বাকি প্রকল্পগুলিতে আইকোয়ারিযোগ্য প্রকাশ করা পছন্দ করি না।
কিং নেস্টর

4
আমি লিনিক্যু-টু-অবজেক্টগুলিতে আরও উল্লেখ করছি, যেখানে আইকুয়ে্যারেবল ছবিটিতে সাধারণত প্রবেশ করে না। যখন কোনও ডাটাবেস জড়িত থাকে, টোললিস্ট () আরও প্রয়োজনীয় হয়ে ওঠে, কারণ অন্যথায় আপনি পুনরাবৃত্ত হওয়ার আগে আপনার সংযোগটি বন্ধ করার ঝুঁকি রাখেন যা খুব ভাল কাজ করে না। তবে, যখন এটি কোনও সমস্যা নয়, যখন আপনি আইকিউয়েরেবলটি আড়াল করতে চান তখন অতিরিক্ত পুনরাবৃত্তি জোর না করে আইকিউয়েরেবলকে আইইনক্যারেবল হিসাবে প্রকাশ করা বেশ সহজ।
জোয়েল মুলার 17

9

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

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


"এটিকে ভ্রান্ত না করে নিরাপদে কোনও সত্যিকারের অন্তর্নিহিত সংগ্রহের রেফারেন্সটি নিরাপদে ফিরিয়ে দিন" - এমনকি আপনি যদি অনুমানযোগ্য <টি> ফেরান, তারা কেবল এটিকে কোনও তালিকায় ফিরে যেতে পারে না <T> এটি পরিবর্তন করতে?
কোবি

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

4
তালিকার <T> সমস্যা রয়েছে যে এটি আপনাকে একটি নির্দিষ্ট প্রয়োগের সংগ্রহের তালিকায় রাখে <টি> বা কেবলমাত্র পাঠ্য সংগ্রহ <টি> পছন্দ করা হয়
স্যাম জাফরন

4

আমি মনে করি আপনি যে কোনওটি ব্যবহার করতে পারেন তবে প্রত্যেকটির একটি ব্যবহার রয়েছে। মূলত Listএটি IEnumerableকিন্তু আপনার কার্যকারিতা গণনা করতে হবে, উপাদান যুক্ত করুন, উপাদানটি সরান

উপাদানগুলি গণনা করার জন্য IEnumerable দক্ষ নয়

সংগ্রহে কেবলমাত্র হতে উদ্দেশ্যে করা হয়, অথবা সংগ্রহে পরিবর্তনের দ্বারা নিয়ন্ত্রিত হয় তাহলে Parentতারপর ফিরে IListঠিক Countএকটি ভাল ধারণা নয়।

লিন্কে, একটি Count()এক্সটেনশন পদ্ধতি রয়েছে IEnumerable<T>যার উপর ভিত্তি .Countকরে অন্তর্নিহিত প্রকারটি যদি সিএলআরের অভ্যন্তরে শর্টকাট হয় তবে IListপারফরম্যান্সের পার্থক্য নগণ্য।

সাধারণত আমি মনে করি (মতামত) যেখানে সম্ভব সেখানে ফিরিয়ে দেওয়া ভাল অনুশীলন, যদি আপনাকে সংযোজন করা প্রয়োজন হয় তবে এই পদ্ধতিগুলি পিতামাত্ত শ্রেণীর সাথে যুক্ত করুন, অন্যথায় গ্রাহক তখন মডেলের মধ্যে সংগ্রহ পরিচালনা করছেন যা নীতিগুলি লঙ্ঘন করে, যেমন manufacturer.Models.Add(model)আইন লঙ্ঘন করে ডিমেটার অবশ্যই এগুলি কেবল গাইডলাইন এবং কঠোর এবং দ্রুত নিয়ম নয়, তবে যতক্ষণ না আপনার প্রয়োগের সম্পূর্ণ গ্রাসপস হয়, ততক্ষণ অন্ধভাবে অনুসরণ করা মোটেও অনুসরণ না করার চেয়ে ভাল।

public interface IManufacturer 
{
     IEnumerable<Model> Models {get;}
     void AddModel(Model model);
}

(দ্রষ্টব্য: এনএনহাইবারনেট ব্যবহার করা হলে আপনাকে বিভিন্ন অ্যাক্সেসর ব্যবহার করে ব্যক্তিগত আইলিস্টে মানচিত্রের প্রয়োজন হতে পারে))


2

আপনি যখন ইনপুট পরামিতিগুলির পরিবর্তে রিটার্ন মানগুলির বিষয়ে কথা বলছেন তখন এটি এত সহজ নয়। যখন এটি একটি ইনপুট প্যারামিটার হয়, আপনি কী করতে হবে তা আপনি ঠিক জানেন। সুতরাং, যদি আপনার সংগ্রহটি পুনরাবৃত্তি করতে সক্ষম হতে হয়, আপনি একটি আইনাম্বারেবল গ্রহণ করেন যখন আপনাকে যুক্ত করতে বা অপসারণের প্রয়োজন হয়, আপনি একটি আইলিস্ট নেন।

ফেরতের মানের ক্ষেত্রে এটি আরও শক্ত g আপনার কলার কি আশা করে? আপনি যদি কোনও আইনুনামেবল ফিরিয়ে দেন, তবে তিনি কোনও অগ্রাধিকার জানতে পারবেন না যে সে এটি থেকে একটি আইলিস্ট তৈরি করতে পারে। তবে, আপনি যদি কোনও আইলিস্ট ফিরিয়ে দেন তবে তিনি জানতে পারবেন যে তিনি এটির মাধ্যমে পুনরাবৃত্তি করতে পারেন। সুতরাং, আপনার কলার ডেটা নিয়ে কী করবে তা আপনাকে অ্যাকাউন্টে নিতে হবে। আপনার কলারের যে কার্যকারিতাটির প্রয়োজন / প্রত্যাশা রয়েছে তা হ'ল কী ফিরবে সে সম্পর্কে সিদ্ধান্ত নেওয়ার সময় যা পরিচালনা করা উচিত।


0

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


0

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

তবে আপনার যদি আইটেমগুলি গণনা প্রয়োজন, তবে ভুলে যাবেন না যে আইইনুমেবল এবং আইলিস্ট - আইকোলিকেশন এর মধ্যে আর একটি স্তর রয়েছে ।


0

আমি এখান থেকে কিছুটা দূরে থাকতে পারি, কারণ এখন পর্যন্ত অন্য কেউ এটিকে পরামর্শ দেয়নি, তবে আপনি কেন ফিরে আসবেন না (I)Collection<T>?

আমি যা মনে করি তা থেকে Collection<T>পছন্দসই রিটার্ন টাইপ হ'ল List<T>কারণ এটি বাস্তবায়নকে বিমুগ্ধ করে। এগুলি সবাই বাস্তবায়ন করে IEnumerable, তবে এটি আমার কাছে কাজের জন্য কিছুটা নিম্ন-স্তরের বলে মনে হয়।


0

আমি মনে করি আপনি যে কোনওটি ব্যবহার করতে পারেন তবে প্রত্যেকটির একটি ব্যবহার রয়েছে। মূলত Listহয়IEnumerable তবে আপনার কার্যকারিতা গণনা, উপাদান যোগ করুন, উপাদান সরান

IEnumerable উপাদান গণনা, বা সংগ্রহের একটি নির্দিষ্ট উপাদান পেতে কার্যকর নয়।

List এমন একটি সংগ্রহ যা আদর্শভাবে নির্দিষ্ট উপাদানগুলি অনুসন্ধানের জন্য উপযুক্ত, উপাদান যুক্ত করা সহজ, বা সেগুলি মুছে ফেলার জন্য উপযুক্ত।

সাধারণত আমি ব্যবহার করার চেষ্টা করি List যেখানে সম্ভব সেখানে কারণ এটি আমাকে আরও নমনীয়তা দেয়।

List<FooBar> getRecentItems() বরং ব্যবহার করুন IList<FooBar> GetRecentItems()


0

আমি মনে করি যে সাধারণ নিয়মটি হ'ল অনাবৃত কাজ করা এড়াতে এবং আপনার কলারকে আরও বিকল্প দেওয়ার জন্য ফিরে আসার জন্য আরও সুনির্দিষ্ট শ্রেণি ব্যবহার করা।

এটি বলেছিল, আমি মনে করি আপনার সামনের কোডটি বিবেচনা করা আরও গুরুত্বপূর্ণ যা আপনি যে কোডটি লিখছেন তার চেয়ে পরবর্তী লোকটি লিখবে (কারণের মধ্যে within) কারণ এটি ইতিমধ্যে বিদ্যমান কোড সম্পর্কে অনুমানগুলি তৈরি করতে পারেন।

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

যদি এই মতামতগুলি সমস্ত মতবিরোধী বলে মনে হয়, তবে সিদ্ধান্তটি বিষয়ভিত্তিক।


0

টিএল; ডাঃ; - সারসংক্ষেপ

  • আপনি যদি ঘরে বসে সফ্টওয়্যার বিকাশ করেন তবে নির্দিষ্ট ধরণের (পছন্দ করুন) ব্যবহার করুন List , তবে সংগ্রহের ক্ষেত্রেও ইনটারপুট প্যারামিটারগুলির জন্য প্রত্যাবর্তনের মানগুলির জন্য ) এবং সর্বাধিক জেনেরিক ধরণের ব্যবহার করুন।
  • যদি কোনও পদ্ধতি কোনও পুনঃ বিতরণযোগ্য লাইব্রেরির পাবলিক এপিআইয়ের একটি অংশ হয় তবে রিটার্ন মান এবং ইনপুট পরামিতি উভয়কে পরিচয় করানোর জন্য কংক্রিট সংগ্রহের প্রকারের পরিবর্তে ইন্টারফেস ব্যবহার করুন।
  • যদি কোনও পদ্ধতি কেবল পঠনযোগ্য সংগ্রহ প্রদান করে তবে রিটার্ন মান প্রকার হিসাবে IReadOnlyListবা IReadOnlyCollectionএটি ব্যবহার করে তা দেখান ।

আরও

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