النوع Range والعامل ..
استخرجوا شرائح باستخدام تعبيرات النطاق
النوع Range والعامل .. درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.
التعرّف على نوع Range
يصف System.Range جزءًا من تسلسل باستخدام Index للبداية وآخر للنهاية. وهو يتكامل تمامًا مع معامل النطاق .. للتعبير عن التسلسلات الفرعية.
using System;
Range r = 1..3;
Console.WriteLine(r.Start + ".." + r.End); // 1..3المعامل .. (النطاق)
ينشئ معامل النطاق a..b كائن Range يبدأ من الفهرس a (بشكل شامل) وينتهي عند الفهرس b (بشكل حصري). لذلك يغطي 1..3 الموضعين 1 و2.
using System;
int[] data = { 10, 20, 30, 40, 50 };
int[] slice = data[1..3];
Console.WriteLine(string.Join(",", slice)); // 20,30البداية شاملة والنهاية حصرية
تحاكي النهاية الحصرية طريقة عمل حلقات for؛ إذ يساوي عدد العناصر end - start. ويُنتج النطاق 2..5 ثلاثة عناصر.
using System;
int[] data = { 0, 1, 2, 3, 4, 5, 6 };
int[] slice = data[2..5];
Console.WriteLine(slice.Length); // 3
Console.WriteLine(string.Join(",", slice)); // 2,3,4النطاقات المفتوحة من أحد الطرفين
يمكنكم حذف أي حد من الحدين. يعني ..3 «من البداية حتى 3»، ويعني 2.. «من 2 حتى النهاية». أما .. وحده فينسخ التسلسل بأكمله.
using System;
int[] d = { 10, 20, 30, 40, 50 };
Console.WriteLine(string.Join(",", d[..3])); // 10,20,30
Console.WriteLine(string.Join(",", d[2..])); // 30,40,50
Console.WriteLine(string.Join(",", d[..])); // 10,20,30,40,50النطاقات مع الفهارس المحسوبة من النهاية
اجمعوا بين .. و^ للاقتطاع نسبةً إلى النهاية. يعني ^2.. «العنصرين الأخيرين».
using System;
int[] d = { 1, 2, 3, 4, 5 };
Console.WriteLine(string.Join(",", d[^2..])); // 4,5
Console.WriteLine(string.Join(",", d[..^1])); // 1,2,3,4 (drop last)Range كقيمة مخزّنة
إن Range قيمة يمكنكم تسميتها وإعادة استخدامها مع مجموعات مختلفة تتبع اصطلاح الطول نفسه.
using System;
Range middle = 1..^1; // drop first and last
int[] a = { 0, 1, 2, 3, 4 };
Console.WriteLine(string.Join(",", a[middle])); // 1,2,3Range.GetOffsetAndLength
لحل نطاق بالاستناد إلى طول ملموس، استدعوا GetOffsetAndLength(length). إذ يعيد إزاحة البداية وطول الجزء، ويتولى معالجة الفهارس المحسوبة من النهاية نيابةً عنكم.
using System;
Range r = ^3..^1;
var (offset, length) = r.GetOffsetAndLength(5);
Console.WriteLine(offset + " " + length); // 2 2Range.All
تساوي الخاصية الساكنة Range.All التعبير ..، وتحدد التسلسل بأكمله. وهي مفيدة عند تمرير النطاقات كوسائط.
using System;
Range whole = Range.All;
int[] d = { 9, 8, 7 };
Console.WriteLine(string.Join(",", d[whole])); // 9,8,7إنشاء Range صراحةً
إلى جانب استخدام المعامل، يمكنكم استدعاء الباني أو أسلوبي المصنع Range.StartAt وRange.EndAt لمزيد من الوضوح.
using System;
Range a = new Range(1, 3);
Range b = Range.StartAt(2);
Range c = Range.EndAt(2);
Console.WriteLine(a + " | " + b + " | " + c);النطاقات الفارغة وغير الصالحة
ينتج النطاق الذي تتساوى بدايته ونهايته جزءًا فارغًا. أما النطاق الذي تقع بدايته بعد نهايته (بعد الحل) فيؤدي إلى استثناء عند تنفيذ الاقتطاع.
using System;
int[] d = { 1, 2, 3, 4 };
Console.WriteLine(d[2..2].Length); // 0 (empty)
try { var _ = d[3..1]; }
catch (ArgumentOutOfRangeException) { Console.WriteLine("invalid range"); }جمع الأجزاء معًا
تجعل النطاقات معالجة النصوص والمصفوفات أكثر اختصارًا. نقتطع هنا نافذة من منتصف مصفوفة من دون أي حساب للفهرس.
using System;
int[] readings = { 5, 7, 9, 11, 13, 15 };
int[] window = readings[1..^1];
Console.WriteLine(string.Join(",", window)); // 7,9,11,13تحقق سريع
تأكدوا من فهمكم لدلالات معامل النطاق.
مراجعة
تعلّمتم أن System.Range يصف جزءًا باستخدام معامل ...
- البداية شاملة والنهاية حصرية: العدد = end - start.
- الحدود اختيارية:
..3و2..و... - يمكن الجمع بين
..و^للاقتطاع من النهاية. - يحل
GetOffsetAndLength(length)النطاق إلى أرقام ملموسة.
الأسئلة الشائعة
هل درس «النوع Range والعامل ..» مجاني؟
نعم — نص درس «النوع Range والعامل ..» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «النوع Range والعامل ..»؟
استخرجوا شرائح باستخدام تعبيرات النطاق تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «النوع Range والعامل ..»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- النوع Index والعامل ^
- النوع Range والعامل ..
- النطاقات مع المصفوفات والسلاسل النصية
- الأنواع المخصّصة الداعمة للنطاقات