کالکشن (Collections) در سی شارپ
کالکشن (Collections) در سی شارپ مجموعههایی برای ذخیره و مدیریت دادهها هستند که شامل انواع جنریک و غیرجنریک میشوند.
کالکشن (Collections) در سیشارپ
کالکشنها (Collections) در سیشارپ مجموعهای از کلاسها هستند که برای ذخیره، مدیریت و پردازش گروهی از اشیا استفاده میشوند.
این کلاسها در فضای نام System.Collections و System.Collections.Generic قرار دارند و امکانات متنوعی برای ذخیرهسازی دادهها فراهم میکنند.
از آنجایی که آرایهها دارای اندازه ثابت هستند، کالکشنها بهعنوان جایگزینی انعطافپذیر برای مدیریت دادهها طراحی شدهاند و امکان افزودن، حذف و مرتبسازی عناصر را ارائه میدهند.
در سیشارپ، کالکشنها به دو دسته غیرجنریک و جنریک تقسیم میشوند.
کالکشنهای غیرجنریک مانند ArrayList و Hashtable قابلیت ذخیرهسازی انواع مختلف دادهها را دارند اما نیاز به تبدیل نوع (Casting) دارند که میتواند منجر به مشکلات عملکردی شود.
در مقابل، کالکشنهای جنریک مانند <List<T>، Dictionary<TKey, TValue و <HashSet<T، برای بهبود عملکرد و ایمنی نوعبندی ارائه شدهاند.
این کالکشنها استفاده بهینه از حافظه را فراهم کرده و از خطاهای زمان اجرا جلوگیری میکنند.
فضای نام کالکشنها در سیشارپ
کالکشنها در سیشارپ در فضای نامهای مختلفی قرار دارند که مهمترین آنها عبارتند از:
-
System.Collections
این فضای نام شامل کالکشنهای غیر جنریک مانند ArrayList، Hashtable، Queue و Stack است.
این نوع کالکشنها قبل از معرفی جنریکها در داتنت رایج بودند و از نوع object برای ذخیره دادهها استفاده میکنند.
-
System.Collections.Generic
این فضای نام شامل کالکشنهای جنریک مانند <List<T>، Dictionary<TKey, TValue>، Queue<T و <Stack<T است.
کالکشنهای جنریک از نوع مشخصی پشتیبانی میکنند که باعث افزایش کارایی و جلوگیری از خطاهای زمان اجرا میشود.
-
System.Collections.Concurrent
این فضای نام شامل کالکشنهای همزمان (Thread-Safe) مانند <ConcurrentBag<T>، ConcurrentQueue<T> و <ConcurrentDictionary<TKey, TValue است که برای برنامهنویسی چندنخی (Multi-threading) بسیار مفید هستند.
-
System.Collections.Immutable
این فضای نام کالکشنهای غیرقابل تغییر (Immutable Collections) را ارائه میدهد که شامل <ImmutableList<T>، ImmutableDictionary<TKey, TValue> و <ImmutableStack<T میشوند.
این کالکشنها پس از مقداردهی اولیه دیگر قابل تغییر نیستند.
ایجاد یک کالکشن در سیشارپ
برای ایجاد و استفاده از کالکشنها در سیشارپ، ابتدا باید فضای نام مربوطه را در برنامه وارد کنیم و سپس نوع کالکشن مناسب را انتخاب نماییم.
مثال 1: استفاده از List
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<string> names = new List<string>();
names.Add("علی");
names.Add("مریم");
names.Add("رضا");
foreach (var name in names)
{
Console.WriteLine(name);
}
}
}
در این مثال یک <List<string ایجاد شده که نامها را در خود نگه میدارد و سپس آنها را نمایش میدهد.
مثال 2: استفاده از <Dictionary<TKey, TValue
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
Dictionary<int, string> students = new Dictionary<int, string>();
students.Add(1, "علی");
students.Add(2, "مریم");
students.Add(3, "رضا");
foreach (var student in students)
{
Console.WriteLine($"شماره دانشجویی: {student.Key}, نام: {student.Value}");
}
}
}
در این مثال یک دیکشنری ایجاد شده که شماره دانشجویی را به نام دانشجو نگاشت میکند.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
مثال 3: استفاده از Queue
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
Queue<string> queue = new Queue<string>();
queue.Enqueue("کاربر 1");
queue.Enqueue("کاربر 2");
queue.Enqueue("کاربر 3");
while (queue.Count > 0)
{
Console.WriteLine(queue.Dequeue());
}
}
}
در این مثال از <Queue<T برای مدیریت یک صف استفاده شده است.
مثال 4: استفاده از Stack
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
Stack<int> stack = new Stack<int>();
stack.Push(10);
stack.Push(20);
stack.Push(30);
while (stack.Count > 0)
{
Console.WriteLine(stack.Pop());
}
}
}
در این مثال از <Stack<T برای مدیریت دادهها بهصورت پشته (LIFO) استفاده شده است.
مثال پروژه محور با استفاده از کالکشنها در سیشارپ
پروژه مدیریت دانشآموزان با استفاده از کالکشنها در سیشارپ
در این پروژه، از کالکشنهای List<T> و Dictionary<TKey, TValue> برای مدیریت اطلاعات دانشآموزان استفاده میکنیم. این پروژه شامل قابلیتهای افزودن، حذف، نمایش و جستجو در بین دانشآموزان است.
ساختار پروژه
-
افزودن دانشآموز جدید
-
حذف دانشآموز
-
نمایش لیست دانشآموزان
-
جستجوی دانشآموز بر اساس شماره دانشجویی
کد پروژه
using System;
using System.Collections.Generic;
class Program
{
// تعریف یک دیکشنری برای نگهداری دانشآموزان (کلید: شماره دانشجویی، مقدار: نام دانشآموز)
static Dictionary<int, string> students = new Dictionary<int, string>();
static void Main()
{
while (true)
{
Console.WriteLine("\n=== مدیریت دانشآموزان ===");
Console.WriteLine("1. افزودن دانشآموز");
Console.WriteLine("2. حذف دانشآموز");
Console.WriteLine("3. نمایش لیست دانشآموزان");
Console.WriteLine("4. جستجوی دانشآموز");
Console.WriteLine("5. خروج");
Console.Write("انتخاب کنید: ");
string choice = Console.ReadLine();
switch (choice)
{
case "1":
AddStudent();
break;
case "2":
RemoveStudent();
break;
case "3":
DisplayStudents();
break;
case "4":
SearchStudent();
break;
case "5":
return;
default:
Console.WriteLine("گزینه نامعتبر است. دوباره تلاش کنید.");
break;
}
}
}
// متد افزودن دانشآموز
static void AddStudent()
{
Console.Write("شماره دانشجویی: ");
int id = int.Parse(Console.ReadLine());
Console.Write("نام دانشآموز: ");
string name = Console.ReadLine();
if (!students.ContainsKey(id))
{
students.Add(id, name);
Console.WriteLine("دانشآموز اضافه شد.");
}
else
{
Console.WriteLine("شماره دانشجویی تکراری است!");
}
}
// متد حذف دانشآموز
static void RemoveStudent()
{
Console.Write("شماره دانشجویی برای حذف: ");
int id = int.Parse(Console.ReadLine());
if (students.Remove(id))
{
Console.WriteLine("دانشآموز حذف شد.");
}
else
{
Console.WriteLine("دانشآموز یافت نشد!");
}
}
// متد نمایش لیست دانشآموزان
static void DisplayStudents()
{
Console.WriteLine("\nلیست دانشآموزان:");
foreach (var student in students)
{
Console.WriteLine($"شماره دانشجویی: {student.Key}, نام: {student.Value}");
}
}
// متد جستجوی دانشآموز
static void SearchStudent()
{
Console.Write("شماره دانشجویی برای جستجو: ");
int id = int.Parse(Console.ReadLine());
if (students.TryGetValue(id, out string name))
{
Console.WriteLine($"دانشآموز یافت شد: {name}");
}
else
{
Console.WriteLine("دانشآموز یافت نشد!");
}
}
}
ویژگیهای این پروژه
- استفاده از Dictionary برای نگهداری اطلاعات دانشآموزان
- قابلیت افزودن، حذف و جستجوی دانشآموزان
- پیادهسازی حلقه بینهایت برای منوی پویا
- استفاده از TryGetValue برای جلوگیری از خطای جستجو
نتیجه اجرای برنامه
=== مدیریت دانشآموزان ===
1. افزودن دانشآموز
2. حذف دانشآموز
3. نمایش لیست دانشآموزان
4. جستجوی دانشآموز
5. خروج
انتخاب کنید: 1
شماره دانشجویی: 101
نام دانشآموز: علی رضایی
دانشآموز اضافه شد.




کاربران ما
شما هم نظرتون با ما دریاره “کالکشن (Collections) در سی شارپ” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید