اینجا میتونی برنامه نویسی ویندوز رو به طور کاملا رایگان یاد بگیری
3 سال پیش / خواندن دقیقه

آشنایی با کالکشن جنریک List در سی شارپ +مثال

در فصل های قبل مطالبی را در مورد کالکشن های غیر جنریک آموختیم. در سی شارپ میتوان از لیست های جنریک نیز بهره برد. در این فصل با کالکشن جنریک <List<T آشنا خواهیم شد.


کالکشن <List<T 

در فصل های قبل مطالبی را در مورد ArrayList آموختید. یک ArrayList زمانی که مقداری به آن افزوده می‌شود، اندازه خود را افزایش می‌دهد. کالکشن <List<T عملکردی شبیه ArrayList دارد. با این حال <List<T یک کالکشن جنریک بوده و ArrayList یک کالکشن غیر جنریک است.


<List<T را می توان به دو روش زیر تعریف و نمونه سازی کرد :

List<int> intList = new List<int>();
//Or
IList<int> intList = new List<int>();

در نمونه مثال بالا اولین عبارت از متغیری با نوع List استفاده می کند و این در حالی است که عبارت دوم از متغیری با نوع IList بهره می برد. <List<T اینترفیس <IList<T را پیاده سازی می کند. در برنامه نویسی به روش شی گرایی پیشنهاد میشود از اینترفیس ها به جای نوع های واقعی استفاده شود. این مورد می تواند در تست و نگهداری برنامه ها کمک قابل توجهی به ما بکند. بنابراین از <IList<T برای تعریف شی ایی از نوع <List<T استفاده کنید.

اضافه کردن عناصر به لیست

از متد ()Add برای افزودن مقادیر به کالکشن مورد نظر خود استفاده کنید. نمونه مثال زیر مقادیر اعداد صحیح را به لیستی از نوع int اضافه می‌کند :

IList<int> intList = new List<int>();
intList.Add(10);
intList.Add(20);
intList.Add(30);
intList.Add(40);
IList<string> strList = new List<string>();
strList.Add("one");
strList.Add("two");
strList.Add("three");
strList.Add("four");
strList.Add("four");
strList.Add(null);
strList.Add(null);
IList<Student> studentList = new List<Student>();
studentList.Add(new Student());
studentList.Add(new Student());
studentList.Add(new Student());

همچنین شما می توانید مقادیر را در زمان نمونه‌سازی به لیست خود اضافه کنید :

IList<int> intList = new List<int>(){ 10, 20, 30, 40 };
//Or
IList<Student> studentList = new List<Student>() { 
                new Student(){ StudentID=1, StudentName="Bill"},
                new Student(){ StudentID=2, StudentName="Steve"},
                new Student(){ StudentID=3, StudentName="Ram"},
                new Student(){ StudentID=1, StudentName="Moin"}
            };

متد ()AddRange

با استفاده از متد ()AddRange می توان همه عناصر یک کالکشن را به کالکشن دیگری اضافه کرد. در نمونه مثال زیر مقادیر کالکشن intList۱ به کالکشن intList۲ اضافه شده است: 

IList<int> intList1 = new List<int>();
intList1.Add(10);
intList1.Add(20);
intList1.Add(30);
intList1.Add(40);
List<int> intList2 = new List<int>();
intList2.AddRange(intList1);

نکته : متد ()AddRange تنها بر روی کالکشن هایی با نوع <List<T کاربرد دارد. در اینجا نمی توان از <IList<T استفاده نمود.

دسترسی به عناصر لیست

با استفاده از متد foreach و به شکل زیر میتوان آیتم های یک لیست را پیمایش کرد :

List<int> intList = new List<int>() { 10, 20, 30 };
intList.ForEach(el => Console.WriteLine(el));

اگر شما از نوع داده ای <IList<T برای متغیر خود استفاده کرده باشید از حلقه foreach به شکل زیر برای پیمایش استفاده کنید :

IList<int> intList = new List<int>() { 10, 20, 30, 40 };
foreach (var el in intList)
                Console.WriteLine(el);

خروجی نمونه مثال بالا به شکل زیر است :

10 20 30 40

میتوان به عناصر موجود در لیست با استفاده از مقادیر index دسترسی پیدا کرد :

IList<int> intList = new List<int>() { 10, 20, 30, 40 };
int elem = intList[1]; // returns 20

برای به دست آوردن تعداد عناصر لیست می‌توان از مشخصه Count استفاده کرد :

برای به دست آوردن تعداد عناصر لیست می‌توان از مشخصه Count استفاده کرد :
IList<int> intList = new List<int>() { 10, 20, 30, 40 };
Console.Write("Total elements: {0}", intList.Count);

خروجی نمونه مثال بالا به شکل زیر است :

Total elements: 4

میتوان از حلقه for برای دسترسی به عناصر آرایه به شکل زیر استفاده نمود :

IList<int> intList = new List<int>() { 10, 20, 30, 40 };
for (int i = 0; i < intList.Count; i++)
                Console.WriteLine(intList[i]);

خروجی نمونه مثال بالا به شکل زیر است :

10 20 30 40

<List<T اینترفیس <IList<T را پیاده سازی می کند. بنابراین <List<T می تواند به صورت ضمنی به <IList<T تبدیل شود :

static void Print(IList<string> list)
{
                Console.WriteLine("Count: {0}", list.Count);
                foreach (string value in list)
    {
                Console.WriteLine(value);
    }
}
static void Main(string[] args)
{
                string[] strArray = new string[2];
    strArray[0] = "Hello";
    strArray[1] = "World";
    Print(strArray);
                List<string> strList = new List<string>();
    strList.Add("Hello");
    strList.Add("World");
    Print(strList);
}

خروجی نمونه مثال بالا به شکل زیر است :

Hello World Hello World

افزودن عناصر به لیست

با استفاده از متد ()Insert می توان مقادیر را به لیست مورد نظر اضافه کرد :

IList<int> intList = new List<int>(){ 10, 20, 30, 40 };
intList.Insert(1, 11);// inserts 11 at 1st index: after 10.
foreach (var el in intList)
                Console.Write(el);

خروجی نمونه مثال بالا به شکل زیر است :

10 11 20 30 40

حذف عناصر از لیست

با استفاده از متدهای ()Remove و ()RemoveAt می توان مقادیر را از یک کالکشن <List<T حذف کرد :

IList<int> intList = new List<int>(){ 10, 20, 30, 40 };
intList.Remove(10); // removes the 10 from a list
intList.RemoveAt(2); //removes the 3rd element (index starts from 0)
foreach (var el in intList)
                Console.Write(el);

خروجی نمونه مثال بالا :

20 30

متد ()TrueForAll

()TrueForAll متدی از کلاس <List<T است. این متد مقدار true را در صورتی که شرط موردنظر صحیح باشد بر می گرداند و در غیر این صورت مقدار بازگشتی false خواهد بود :

List<int> intList = new List<int>(){ 10, 20, 30, 40 };
bool res = intList.TrueForAll(el => el%2 == 0);// returns true

در نمونه مثال بالا در صورتی که مقادیر موجود در لیست همگی بر ۲ بخش پذیر باشند، مقدار true برگردانده میشود. این متد همچنین می تواند یک متد را به عنوان delegate دریافت کند :

static bool isPositiveInt(int i)
{
                return i > 0;
}
static void Main(string[] args)
{
                List<int> intList = new List<int>(){10, 20, 30, 40};
                bool res = intList.TrueForAll(isPositiveInt);
}


شاید از نوشته‌های زیر خوشتان بیاید
نظر خود را درباره این پست بنویسید ...

منوی سریع