উত্তর:
List<string> myList = new List<string>();
IEnumerable<string> myEnumerable = myList;
List<string> listAgain = myEnumerable.ToList();
using System.Linq;
বা আপনি টোললিস্ট করতে পারবেন না ()
একটি List<T>
একটি হল IEnumerable<T>
'রূপান্তর' একটি করার কোন প্রয়োজন নেই, তাই আসলে List<T>
একটি করতে IEnumerable<T>
। যেহেতু a List<T>
হয় একটি IEnumerable<T>
, আপনি কেবলমাত্র List<T>
একটি ভেরিয়েবলকে টাইপ করতে পারেন IEnumerable<T>
।
অন্যান্য উপায় কাছাকাছি, না যে IEnumerable<T>
একটি হল List<T>
offcourse, অতএব আপনাকে কল করতে হবে ToList()
সদস্য পদ্ধতি IEnumerable<T>
।
এ List<T>
ইতিমধ্যে একটি IEnumerable<T>
, সুতরাং আপনি সরাসরি আপনার List<T>
পরিবর্তনশীলতে লিনকিউ স্টেটমেন্ট চালাতে পারেন ।
আপনি যদি লিনকিউ এক্সটেনশন পদ্ধতিগুলি না দেখেন তবে OrderBy()
আমি অনুমান করছি যে এটি using System.Linq
আপনার উত্স ফাইলে কোনও নির্দেশনা নেই।
আপনাকে লিনকিউ এক্সপ্রেশন ফলাফলকে List<T>
স্পষ্টভাবে আবার রূপান্তর করতে হবে , যদিও:
List<Customer> list = ...
list = list.OrderBy(customer => customer.Name).ToList()
একদিকে: নোট করুন যে স্ট্যান্ডার্ড লিনকিউ অপারেটরগুলি (পূর্ববর্তী উদাহরণ অনুসারে) বিদ্যমান তালিকাটি পরিবর্তন করে না - list.OrderBy(...).ToList()
পুনঃ অর্ডার করা ক্রমের ভিত্তিতে একটি নতুন তালিকা তৈরি করবে। তবে এটি একটি এক্সটেনশন পদ্ধতি তৈরি করা বেশ সহজ যা আপনাকে ল্যাম্বডাস এর সাথে ব্যবহার করতে দেয় List<T>.Sort
:
static void Sort<TSource, TValue>(this List<TSource> list,
Func<TSource, TValue> selector)
{
var comparer = Comparer<TValue>.Default;
list.Sort((x,y) => comparer.Compare(selector(x), selector(y)));
}
static void SortDescending<TSource, TValue>(this List<TSource> list,
Func<TSource, TValue> selector)
{
var comparer = Comparer<TValue>.Default;
list.Sort((x,y) => comparer.Compare(selector(y), selector(x)));
}
তারপরে আপনি ব্যবহার করতে পারেন:
list.Sort(x=>x.SomeProp); // etc
এটি বিদ্যমান তালিকাকে একইভাবে আপডেট করে যা List<T>.Sort
সাধারণত হয়।
ToList
হবে - তবে আমি স্পষ্ট করে বলব।
List<T>
হচ্ছেIEnumerable<T>
List<T>
প্রয়োগগুলি IEnumerable<T>
(এবং এর মতো আরও অনেকগুলি IList<T>, ICollection<T>
) অতএব, কোনও তালিকাই ইতিমধ্যে একটি হিসাবে রূপান্তরিত করার দরকার নেই কারণ এটি ইতিমধ্যে একটি IEnumerable<T>
।
উদাহরণ:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
Person person1 = new Person() { Id = 1, Name = "Person 1" };
Person person2 = new Person() { Id = 2, Name = "Person 2" };
Person person3 = new Person() { Id = 3, Name = "Person 3" };
List<Person> people = new List<Person>() { person1, person2, person3 };
//Converting to an IEnumerable
IEnumerable<Person> IEnumerableList = people;
আপনি Enumerable.AsEnumerable()
পদ্ধতি ব্যবহার করতে পারেন
IEnumerable<Person> iPersonList = people.AsEnumerable();
IEnumerable<T>
হচ্ছেList<T>
IEnumerable<Person> OriginallyIEnumerable = new List<Person>() { person1, person2 };
List<Person> convertToList = OriginallyIEnumerable.ToList();
এটি সত্তা ফ্রেমওয়ার্কে দরকারী ।
মেমরিতে অনুলিপি রোধ করতে, পুনরায় ভাগ করা এই পরামর্শ দিচ্ছে:
List<string> myList = new List<string>();
IEnumerable<string> myEnumerable = myList;
List<string> listAgain = myList as List<string>() ?? myEnumerable.ToList();
.ToList () একটি নতুন অপরিবর্তনীয় তালিকা ফিরিয়ে দেয়। সুতরাং তালিকাগুলিতে পরিবর্তনগুলি @ টামাস সিজনেজ উত্তরে মাইলিস্টকে প্রভাবিত করে না। এটি বেশিরভাগ ক্ষেত্রে কমপক্ষে দুটি কারণে সঠিক: এটি অন্য অঞ্চলে (আলগা দম্পতি) প্রভাবিত করে এক অঞ্চলে পরিবর্তন প্রতিরোধ করতে সহায়তা করে এবং এটি খুব পঠনযোগ্য, যেহেতু আমাদের সংকলক উদ্বেগগুলির সাথে কোড ডিজাইনি করা উচিত নয়।
তবে কয়েকটি দৃষ্টান্ত রয়েছে যেমন কড়া লুপে থাকা বা এম্বেড করা বা লো মেমরি সিস্টেমে কাজ করা, যেখানে সংকলক বিবেচনাগুলি বিবেচনা করা উচিত।