رضا بزرگی
رضا بزرگی
خواندن ۲ دقیقه·۶ سال پیش

انواع مختلف آرایه‌ها و تفاوت آنها در C#

هر موردی ارزش پیگیری و پس از آن یادگیری را ندارد. یادگیری پراکنده و بدون کاربرد، به‌زودی فراموش خواهد شد و اثر تلاش را بی‌ارزش میکند.

یکی از موارد مهمی که شناختن تفکیک آنها ارزش و اهمیت ویژه‌ای دارد - در سی‌شارپ و دنیای دات‌نت-، کالکشن‌هاست.

  • در یک تعریف معمولی آرایه، تعداد آیتم‌های آن فیکس هستند و نمیتوان چیزی بدان اضافه کرد.

int[] fixedArray = { 1, 2, 3, 4 };

  • با استفاده از ArrayList میتوانیم لیستی با طول داینامیک تعریف کنیم و چون از نوع object نگهداری میکند میتوانیم هر چیزی را نگهداری کنیم که به‌شدت پرمونس را تحت‌تاثیر قرار میدهد. برای همین جنریک‌ها ایجاد شدند.
var dynamicArray = new System.Collections.ArrayList(); dynamicArray.Add("hello"); //adding a string dynamicArray.Add(1); //adding an int
  • از IEnumerable و فرزند جنریک آن IEnumberable<T> بسیار بدلیل سرعت بالا استفاده میشود. ولی این فقط بلد است از آیتم‌های لیست خودش به بعدی حرکت کند و در درون خودش گردش کند مثلا اندیس ندارد و حذف کردن و اضافه کردن و مثلا count ندارد. / البته میشود با Countی که از Linq داریم تعدادش را محاسبه کند.
مراتب ارث‌بری کاکشن ها از هم
مراتب ارث‌بری کاکشن ها از هم
  • کالکشن ICollection<T> فرزند IEnumerable<T> است که علاوه بر GetEnumerator که قادر به حرکت کردن از یک آیتم به آیتم دیگر را فراهم میسازد، میتواند تعداد/حذف/اضافه/شامل را هم داشته باشد. از ICollection معمولا استفاده نمیشود.
  • کالکشنی IList<T> که از ICollection<T> ارث‌بری میکند، و کلیه قابلیت‌های گردش در کالکشن، حذف، شمارش، اضافه کردن را دارد. به اضافه‌ی آنکه میتواند به هر کدام از مقادیر کالکشن اندیس اختصاص ‌میدهد و از یک مقدار، اندیس آنرا بگوید (IndexOf). و بسیار استفاده میشود.
  • فرقی نمیکند که چه آبجکتی باشد (جنریک) هرچه باشد IList<T> به المان درونی‌اش اندیس جهت دسترسی تخصیص میدهد.
  • از IList<T> زمانی باید استفاده کرد که میخاهیم بدونیم هر المان در کجا قرار گرفته است.
  • در IQueryableها که از IEnumerableها ارث‌بری میکنند. خاصیتی وجود دارد به‌نام کلاسی هست شامل کدهای سی‌شارپی که تازمانیکه نیاز به محتوای آن نداریم اجرا نمیشود) و با استفاده از ان میتوانیم کوئری‌هایی بنویسیم (دستورالعمل و نه اطلاعات) و بعدا اجرا کنیم (زمانیکه اجرا شد اطلاعات بدست میرسند)
  • جهت لیست کردن یک آرایه آنرا ToList میکنیم. و جهت Queryable کردن آن AsQueryable میکنیم آنرا.
  • خروجی DbSetهای EF، از جنس IQuerable هستند که اکسپرشن خروجی بدهد.
  • اگر میخاهیم که با یک داده‌ای کار کنیم بهتر است دیگر اکسپرشن نباشد و آنرا به لیست تبدیل کنیم و با داده‌های آن کار کنیم. اما کوئری‌های بزرگ بهتر است expression باشد که حالت دستورالعمل دارد و در موقع لازم اجرا میشود و در سرعت‌عمل موثر است


collectionlistarrayc
مهندس نرم‌افزار و توسعه‌دهنده وب؛ تکنولوژی و هنر دو عنصر حیاتی زندگیم هستند
شاید از این پست‌ها خوشتان بیاید