التبديل C #:حالة عدم الوقوع في قيود الحالات الأخرى
-
09-06-2019 - |
سؤال
هذا السؤال هو نوع من الإضافة إلى هذا سؤال
في C#، لا يمكن لحالة التبديل أن تنتقل إلى حالات أخرى، وهذا يسبب خطأ في الترجمة.في هذه الحالة أقوم فقط بإضافة بعض الأرقام إلى إجمالي الشهر للشهر المحدد وكل شهر لاحق بعد ذلك.(مثال بسيط وليس حقيقيا)
switch (month)
{
case 0:
add something to month totals
case 1:
add something to month totals
case 2:
add something to month totals
default:
break;
}
هل هناك بديل منطقي لهذا في C# دون الحاجة إلى كتابة الكثير من عبارات if؟
if (month <= 0)
add something to month
if (month <= 1)
add something to month
if (month <= 2)
add something to month
.... etc
المحلول
في كثير من الأحيان عندما ترى الضجيج الناتج عن بيان تبديل ضخم أو العديد من البيانات التي قد تقع في أكثر من كتلة واحدة، فإنك تحاول منع التصميم السيئ.
بدلاً من ذلك، ماذا لو قمت بتنفيذ نمط المواصفات لمعرفة ما إذا كان هناك شيء مطابق، ثم التصرف بناءً عليه؟
foreach(MonthSpecification spec in this.MonthSpecifications)
{
if(spec.IsSatisfiedBy(month))
spec.Perform(month);
}
ثم يمكنك فقط إضافة مواصفات مختلفة تتوافق مع ما تحاول القيام به.
من الصعب معرفة ما هو نطاقك، لذلك قد يكون المثال الخاص بي مفتعلًا بعض الشيء.
نصائح أخرى
في عبارات التبديل C#، يمكنك تجاوز الحالات فقط إذا لم يكن هناك بيان للحالة التي تريد تجاوزها
switch(myVar)
{
case 1:
case 2: // Case 1 or 2 get here
break;
}
ومع ذلك، إذا كنت تريد تنفيذ بيان ما، فيجب عليك استخدام GOTO المخيف
switch(myVar)
{
case 1: // Case 1 statement
goto case 2;
case 2: // Case 1 or 2 get here
break;
}
هل تضيف الثوابت؟إذا كان الأمر كذلك، فربما يعمل شيء مثل هذا (بناء جملة C):
const int addToTotals[] = {123, 456, ..., 789};
for(i=month;i<12;i++)
totals += addToTotals[i];
يمكنك القيام بشيء مماثل باستخدام مؤشرات المتغير أو الدالة إذا كنت بحاجة إلى عبارات أكثر تعقيدًا من إضافة ثابت إلى الإجماليات لكل شهر تالٍ.
-آدم
هناك بالفعل سؤال يتناول هذا الموضوع:
يحرر:
هدفي الرئيسي من الإشارة إلى ذلك، أيها السادة، هو أن سؤالين لهما اسم شبه متطابق يضيفان ارتباكًا إلى مجموعة الأسئلة.
اكتب حالات التبديل بترتيب عكسي
case 2:
case 1:
case 0:
break;
default:
امل ان يساعد!