فصل 22 از 40 درس 1 از 1

Collectionها

Collectionها

بخشی از آموزش جامع C# و .NET 10

محتوای درس Collectionها

Collectionهای Generic امکان نگهداری و مدیریت پویای داده‌ها را فراهم می‌کنند. انتخاب ساختار مناسب بر اساس نوع دسترسی، ترتیب، یکتایی و عملیات موردنیاز اهمیت دارد.

۱. List<T>

List مجموعه‌ای ترتیبی با اندازه پویاست و برای دسترسی Index-based و افزودن انتهای لیست بسیار رایج است.

مثال

var list=new List<string>{"A","B"}; list.Add("C"); Console.WriteLine(list.Count);

در این مثال، مفهوم «List<T>» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۲. Dictionary<TKey,TValue>

Dictionary دسترسی سریع بر اساس Key یکتا را فراهم می‌کند و برای Lookup مناسب است.

مثال

var map=new Dictionary<int,string>{{1,"Mouse"}};
         Console.WriteLine(map[1]);

در این مثال، مفهوم «Dictionary<TKey,TValue>» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۳. HashSet<T>

HashSet مجموعه‌ای از مقادیر یکتا با عملیات سریع Contains، Union و Intersect است.

مثال

var set=new HashSet<string>(StringComparer.OrdinalIgnoreCase){"C#","c#"};
         Console.WriteLine(set.Count);

در این مثال، مفهوم «HashSet<T>» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۴. Queue<T>

Queue مدل FIFO دارد و برای صف پردازش مناسب است.

مثال

var q=new Queue<string>();q.Enqueue("A");q.Enqueue("B");Console.WriteLine(q.Dequeue());

در این مثال، مفهوم «Queue<T>» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۵. Stack<T>

Stack مدل LIFO دارد و در Undo، Parsing و پیمایش‌های خاص کاربرد دارد.

مثال

var s=new Stack<string>();s.Push("A");s.Push("B");Console.WriteLine(s.Pop());

در این مثال، مفهوم «Stack<T>» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۶. انتخاب Collection

انتخاب باید بر اساس الگوی دسترسی باشد، نه صرفاً عادت به استفاده از List.

مثال

IReadOnlyList<int> values=new List<int>{1,2,3};
         Console.WriteLine(values.Count);

در این مثال، مفهوم «انتخاب Collection» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۷. مثال‌های عملی

var products = new List<string> { "Mouse", "Keyboard" };
         products.Add("Monitor");
         
         var prices = new Dictionary<string, decimal>
         {
             ["Mouse"] = 900_000m,
             ["Keyboard"] = 2_500_000m
         };

این نمونه عملی چند مفهوم فصل را در کنار هم قرار می‌دهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.

var tags = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
         tags.Add("CSharp");
         tags.Add("csharp");
         Console.WriteLine(tags.Count);

این نمونه عملی چند مفهوم فصل را در کنار هم قرار می‌دهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.

۸. خطاهای رایج

• جست‌وجوی مکرر خطی در List وقتی Dictionary مناسب‌تر است

• فرض حفظ ترتیب در ساختارهایی که قرارداد ترتیب ندارند

• استفاده از Collection غیرGeneric قدیمی بدون نیاز

۹. نکات اجرایی

• نام‌ها، Typeها و Methodها را متناسب با مفهوم دامنه و بدون ابهام انتخاب کنید.

• هشدارهای کامپایلر و Nullable را بدون بررسی خاموش نکنید.

• منطق هر بخش را تا حد امکان کوچک، قابل تست و مستقل از I/O غیرضروری نگه دارید.

۱۰. تمرین عملی

یک سبد خرید با List و یک Lookup قیمت با Dictionary بسازید و جمع کل سفارش را محاسبه کنید.

۱۱. جمع‌بندی

در این فصل، مبانی «Collectionها» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصل‌های بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم می‌کند.