LINQ Range Method في C#

شرح دالة Range() في LINQ

في هذا الدرس، سنتعرّف على دالة Range() في LINQ بلغة C#، والتي تُستخدم لتوليد تسلسل من الأعداد الصحيحة ضمن نطاق محدد، بطريقة بسيطة وسريعة.

تُعتبر Range() من دوال التوليد (Generation Operators) في LINQ، مثل Repeat() وEmpty()، وتُستخدم بكثرة في التكرار، والاختبار، وإنشاء بيانات أولية.


الصيغة العامة:


IEnumerable<int> numberSequence = Enumerable.Range(int start, int count);
  • start: القيمة التي يبدأ منها التسلسل.
  • count: عدد القيم المتتابعة التي سيتم توليدها.
ملاحظة: إذا كانت قيمة count سالبة أو إذا تجاوز start + count - 1 الحد الأقصى لـ Int32، سيتم إطلاق استثناء من نوع ArgumentOutOfRangeException.


مثال 1: توليد الأعداد من 1 إلى 10


using System;
using System.Linq;

class Program
{
    static void Main()
    {
        IEnumerable<int> numberSequence = Enumerable.Range(1, 10);

        foreach (int num in numberSequence)
        {
            Console.Write($"{num} ");
        }
    }
}


الناتج:


1 2 3 4 5 6 7 8 9 10


مثال 2: تصفية الأعداد الزوجية باستخدام Where


var evenNumbers = Enumerable.Range(10, 40)
                            .Where(x => x % 2 == 0);

foreach (int num in evenNumbers)
{
    Console.Write($"{num} ");
}


الناتج:


10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48


مثال 3: استخدام Select لحساب مربع كل عدد


var squares = Enumerable.Range(1, 5)
                        .Select(x => x * x);

foreach (int square in squares)
{
    Console.Write($"{square} ");
}


الناتج:


1 4 9 16 25



ملاحظات هامة:

  • التنفيذ المؤجل: دالة Range() تُنفّذ باستخدام Deferred Execution، أي لا تُنفّذ فعليًا إلا عند التكرار عليها.
  • سيناريوهات الاستخدام:
    • الحلقات: بديل سريع وآمن لـ for loop.
    • توليد بيانات: مثالية لتوليد بيانات لاختبار التطبيقات.
    • الفهرسة: لإنشاء تسلسل يساعد في الوصول إلى عناصر مصفوفة أو قائمة.

تعليقات

المشاركات الشائعة من هذه المدونة

C# - Arrays

Entity Framework - ما هو ORM؟ ونبذة عن Dapper وNHibernate

Entity Framework - مقدمة عن Entity Framework