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ها» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصلهای بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم میکند.