۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

نحوه استفاده از IEnumerable، ICollection، IList و IQueryable در سی شارپ

تفاوت بین متداول ترین رابط های مورد استفاده برای دسترسی و دستکاری مجموعه داده ها در سی شارپ را درک کنید.

تفاوت بین متداول ترین رابط های مورد استفاده برای دسترسی و دستکاری مجموعه داده ها در سی شارپ را درک کنید.

زبان برنامه نویسی C# پشتیبانی عالی برای کار با مجموعه داده ها ارائه می دهد. سی شارپ شامل چندین کلاس و رابط است که می تواند به شما کمک کند مجموعه ای از داده ها را به طور موثر جستجو کنید. متداول ترین رابط های مورد استفاده برای کار با مجموعه ها IEnumerable، ICollection، IList و IQueryable هستند.

در این مقاله هر یک از این رابط‌ها را بررسی می‌کنیم و در مورد نحوه کار با آنها در .NET 8 بحث خواهیم کرد که با نمونه‌های کد نشان داده شده است.

یک پروژه برنامه کاربردی کنسول در ویژوال استودیو ایجاد کنید

ابتدا، اجازه دهید یک پروژه برنامه کاربردی کنسول NET Core در ویژوال استودیو ایجاد کنیم. با فرض اینکه Visual Studio 2022 در سیستم شما نصب شده است، مراحل ذکر شده در زیر را برای ایجاد یک پروژه برنامه کاربردی کنسول NET Core جدید دنبال کنید.

  1. Visual Studio IDE را راه اندازی کنید.
  2. روی “ایجاد پروژه جدید” کلیک کنید.
  3. در پنجره “ایجاد پروژه جدید”، “Console App (.NET Core)” را از لیست الگوهای نمایش داده شده انتخاب کنید.
  4. بعدی را کلیک کنید.
  5. در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
  6. بعدی را کلیک کنید.
  7. در پنجره “اطلاعات اضافی” نشان داده شده در ادامه، “NET 8.0 (پشتیبانی طولانی مدت)” را به عنوان نسخه چارچوبی که می خواهید استفاده کنید انتخاب کنید.
  8. روی ایجاد کلیک کنید.

ما از این پروژه برنامه کاربردی کنسول NET 8 برای کار با رابط‌های IEnumerable، ICollection، IList و IQueryable در بخش‌های بعدی این مقاله استفاده خواهیم کرد.

رابط IEnumerable در سی شارپ

اینترفیس IEnumerable در سی شارپ به شما امکان می دهد تا روی مجموعه ای از عناصر تکرار کنید. این شامل یک روش به نام GetEnumerator است که نمونه ای از نوع IEnumerable را برمی گرداند. می‌توانید از این نمونه برای تکرار مجموعه‌ای از عناصر به صورت فقط خواندنی و فقط به جلو استفاده کنید. شما نمی توانید از IEnumerable برای تکرار به عقب استفاده کنید.

مقدمه JSX: HTML که جاوا اسکریپت را انجام می دهد

اینترفیس IEnumerable در فضای نام System.Collections مطابق شکل زیر تعریف شده است.

public interface IEnumerable<out T> : IEnumerable
{
    new IEnumerator<T> GetEnumerator();
}

قطعه کد زیر نشان می دهد که چگونه می توانید با IEnumerable در سی شارپ کار کنید.

List<string> cities = new List<string>() { "New York", "London", "Tokyo", "Lisbon", "Hyderabad", "Chicago" };
IEnumerable<string> query = cities.Where(x => x.StartsWith("L"));
foreach (var city in query)
{
    Console.WriteLine(city);
}

هنگامی که کد قبلی را اجرا می کنید، نام شهرهایی که با حرف “L” شروع می شوند در پنجره کنسول نمایش داده می شود.

رابط ICollection در سی شارپ

اینترفیس ICollection رابط پایه همه کلاس‌های مربوط به فضای نام System.Collections است. این مجموعه کلی از اشیاء را فراهم می کند که در آن عناصر مجموعه با استفاده از یک نمایه قابل دسترسی هستند.

اینترفیس ICollection معادل عمومی رابط ICollection است. این رابط IEnumerable را گسترش می دهد، که به نوبه خود رابط کاربری IEnumerable را همانطور که در قطعه کد زیر نشان داده شده است گسترش می دهد.

public interface ICollection<T> : IEnumerable<T>
{     
        int Count { get; }
        bool IsReadOnly { get; }
        void Add(T item);
        void Clear();
        bool Contains(T item);
        void CopyTo(T[] array, int arrayIndex);
        bool Remove(T item);
}

برخلاف رابط IEnumerable، رابط ICollection به شما امکان می دهد عناصر را از مجموعه اضافه یا حذف کنید. قطعه کد زیر نشان می دهد که چگونه می توانید از رابط ICollection در سی شارپ استفاده کنید.

ICollection<string> countries = new Collection<string>();
countries.Add("USA");
countries.Add("India");
countries.Add("England");
countries.Add("Japan");
foreach (string country in countries)
{
    Console.WriteLine(country);
}

هنگامی که کد بالا را اجرا می کنید، نام کشور های اضافه شده به مجموعه در پنجره کنسول نمایش داده می شود.

رابط IList در سی شارپ

رابط IList در فضای نام System.Collections موجود است. این مجموعه ای با تایپ قوی را نشان می دهد که در آن عناصر مجموعه با استفاده از یک نمایه قابل دسترسی هستند. IList رابط ICollection را گسترش می‌دهد و شامل روش‌های اضافی مانند IndexOf، Insert و RemoveAt برای کار با مجموعه‌ها است.

تکینگی هوش مصنوعی اینجاست

قطعه کد زیر نشان می دهد که چگونه رابط IList در فضای نام System.Collections تعریف شده است.

public interface IList : ICollection
    {
        Object this[int index] {
            get;
            set;
        }
        int Add(Object value); 
        bool Contains(Object value);
        void Clear();
        bool IsReadOnly
        { get; }
         bool IsFixedSize
        {
            get;
        }
        int IndexOf(Object value); 
        void Insert(int index, Object value); 
        void Remove(Object value); 
        void RemoveAt(int index);
    }

قطعه کد زیر نشان می دهد که چگونه می توانید نمونه ای از نوع IList ایجاد کنید و عناصر را به مجموعه اضافه و حذف کنید.

IList<string> customers = new List<string>();
customers.Add("Joydip");
customers.Add("Steve");
customers.Add("Peter");
customers.Insert(2, "Michael");
customers.RemoveAt(0);
for (int i = 0; i < customers.Count; i++)
{
    Console.WriteLine(customers[i]);
}

توجه داشته باشید که چگونه نام مشتری در مجموعه درج شده است و نام مشتری در ابتدای مجموعه حذف شده است. هنگامی که قطعه کد قبلی را اجرا می کنید، نام های موجود در مجموعه به روز شده همانطور که در شکل ۱ نشان داده شده است در پنجره کنسول نمایش داده می شود.

ilist in c sharp

شکل ۱. یک مثال IList در C#.

رابط IQueryable در سی شارپ

واسط IQueryable مربوط به فضای نام System.Linq رابط IEnumerable را گسترش می دهد و می تواند برای پرس و جو داده ها از منابع داده ای که ارائه دهندگان IQueryable را پیاده سازی می کنند استفاده شود. رابط IQueryable رابط IEnumerable را گسترش می دهد و همانطور که در قطعه کد ارائه شده در زیر نشان داده شده است، تعریف می شود.

public interface IQueryable<out T> : IEnumerable<T>, IQueryable
{
}

در حالی که رابط IEnumerable را می توان برای کار با مجموعه های درون حافظه ای از داده ها استفاده کرد، رابط IQueryable را می توان با منابع داده خارجی مانند سرویس وب یا پایگاه داده استفاده کرد. کلاس زیر را در نظر بگیرید.

public class Author
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public bool IsActive { get; set; }
}

قطعه کد زیر نشان می دهد که چگونه می توانید با رابط IQueryable در C# کار کنید.

List<Author> authors = new List<Author>()
{
    new Author(){Id = 1, FirstName = "Joydip", LastName = "Kanjilal", IsActive = true},
    new Author(){Id = 2, FirstName = "Michael", LastName = "Smith", IsActive = false},
    new Author(){Id = 3, FirstName = "Steve", LastName = "Jones", IsActive = true}
};
IQueryable<Author> query = authors.AsQueryable()
                                 .Where(a => a.IsActive == true);
foreach (var author in query)
{
    Console.WriteLine($"Id : {author.Id}  FirstName : {author.FirstName}    LastName : {author.LastName}");
}

رابط IQueryable برای کار با مجموعه داده های بزرگ مناسب است، به خصوص زمانی که شما نیاز به پیاده سازی صفحه بندی دارید تا فقط داده های مورد نیاز خود را بازیابی کنید.

4 ویژگی جدید هوش مصنوعی برای توسعه دهندگان در SingleStoreDB

از کدام رابط مجموعه باید استفاده کنید؟

در اینجا خلاصه‌ای سریع از ویژگی‌های رابط‌های IEnumerable، ICollection، IList و IQueryable آورده شده است.

  • IEnumerable به شما امکان می دهد تا به عناصر یک مجموعه به روشی فقط خواندنی و فقط به جلو دسترسی داشته باشید. بدون افزودن، حذف یا تغییر عناصر.
  • ICCollection از رابط IEnumerable به ارث می رسد و عملکردهای اضافی از جمله افزودن، حذف و اصلاح عناصر را ارائه می دهد.
  • IList رابط ICollection را گسترش می دهد و مجموعه هایی با تایپ قوی را نشان می دهد که از طریق فهرست قابل دسترسی هستند. بنابراین علاوه بر افزودن، حذف و اصلاح، می‌توانید موارد را با استفاده از مقادیر نمایه درج یا حذف کنید.
  • IQueryable رابط IEnumerable را گسترش می دهد، از LINQ پشتیبانی می کند و برای کار با مجموعه داده های بزرگ مناسب است. وقتی از IQueryable با LINQ به SQL یا LINQ به Entities استفاده می کنید، یک عبارت LINQ به SQL ایجاد می کند که در لایه داده برنامه شما اجرا می شود.

انتخاب رابط مجموعه در سی شارپ به نیازهای برنامه شما بستگی دارد. اگر می خواهید داده ها را از یک پایگاه داده پرس و جو کنید، از IQueryable استفاده کنید. اگر می خواهید داده ها را از حافظه پرس و جو کنید، بسته به آنچه می خواهید با عناصر مجموعه انجام دهید، از IEnumerable، ICollection یا IList استفاده کنید.