برنامه نویسی

ienumerable vs Ireadonlylist in .net: چه زمانی باید از هر کدام استفاده کنید؟

اگر در C# و .NET کار می کنید ، به سرعت در رابط های مختلف مجموعه مانند اجرا خواهید شد IEnumerable وت IReadOnlyListبشر در نگاه اول ، آنها کاملاً مشابه به نظر می رسند-هر دو به شما اجازه می دهند با مجموعه ای از موارد به روشی خواندنی کار کنید. پس چه زمانی باید از هر کدام استفاده کنید؟ در این پست ، اختلافات را تجزیه می کنم ، موارد استفاده در دنیای واقعی را نشان می دهم و نمونه های کد را به شما می دهم تا دقیقاً بدانید که چه زمانی به یک یا دیگری دسترسی پیدا کنید.

تعاریف سریع

ساده ترین راه برای نشان دادن دنباله ای از مواردی که می توانید از آن استفاده کنید (با استفاده از foreach). این امکان را به شما نمی دهد که از طریق فهرست دسترسی پیدا کنید یا مستقیماً تعداد آنها را دریافت کنید.

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


نمونه های کد

مثال 1: استفاده از IEnumerable

public IEnumerable<string> GetAllProductNames()
{
    // Could return from a database query, LINQ, etc.
    return products.Select(p => p.Name);
}

// Usage
foreach (var name in GetAllProductNames())
{
    Console.WriteLine(name);
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چه زمانی استفاده کنید:

  • هنگامی که شما فقط نیاز به تکرار (حلقه) بر روی موارد دارید.
  • هنگامی که نتایج ممکن است در پرواز جریان ، تولید یا فیلتر شود.
  • لازم نیست تعداد دقیق موارد یا موقعیت های آنها را بدانید.

مثال 2: استفاده از IReadOnlyList

public IReadOnlyList<Product> GetFeaturedProducts()
{
    // Return a fixed, materialized list
    return featuredProducts.AsReadOnly();
}

// Usage
for (int i = 0; i < GetFeaturedProducts().Count; i++)
{
    var product = GetFeaturedProducts()[i];
    Console.WriteLine($"{i}: {product.Name}");
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چه زمانی استفاده کنید:

  • هنگامی که شما نیاز به دسترسی به موارد توسط فهرست آنها دارید (به عنوان مثال ، لیست[0]).
  • هنگامی که می خواهید تعداد (لیست) را در معرض دید قرار دهید.
  • هنگامی که می خواهید تضمین کنید که این مجموعه ثابت است و توسط مصرف کننده قابل تغییر نیست.

نشان ienumerable ineadonlylist
می تواند با foreach حلقه کند
دسترسی توسط فهرست
شمارش
تغییر ناپذیر/فقط خواندنی ❌ (فقط تکرار می شود) ✅ (قرارداد فقط خواندنی)
اعدام معوق ✅ (اغلب) ❌ (معمولاً مادی)

چگونه تصمیم بگیریم از کدام استفاده شود

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

  • استفاده کردن IReadOnlyList هنگامی که شما می خواهید ایمنی و راحتی یک لیست ثابت و فقط خواندنی باشد که هم دسترسی و هم دسترسی مبتنی بر شاخص را در معرض دید قرار می دهد.

نمونه های دنیای واقعی

الگوی مخزن (فقط خواندنی)

  • استفاده کردن IEnumerable برای مجموعه داده های بزرگ می خواهید در صورت تقاضا جریان یا فیلتر کنید.
  • استفاده کردن IReadOnlyList برای روشهایی که مجموعه ای از نتایج را که می خواهید قفل کنید (مانند 10 محصول برتر) بازگردانید.

پاسخ API

  • استفاده کردن IReadOnlyList برای بازگشت یک مجموعه واضح و ثابت (به سریال سازی و قراردادها کمک می کند).

  • استفاده کردن IEnumerable در داخل ، به ویژه هنگام زنجیر کردن نمایش داده های Linq.


نکته سریع برای نوجوانان

  • اگر می خواهید به دیگران اجازه دهید از طریق داده های خود حلقه کنند ، از آنها استفاده کنید IEnumerableبشر
  • اگر می خواهید به دیگران اجازه دهید ببینند چند مورد را در اختیار شما قرار می دهند و از طریق فهرست دسترسی دارند – اما هر چیزی را اصلاح نمی کنند – استفاده IReadOnlyListبشر

سؤالاتی دارید یا می خواهید نکات دات نت در دنیای واقعی بیشتر؟ نظر زیر را رها کنید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا