لماذا يتطلب برنامج التحويل البرمجي C# عبارة BREKE في بناء التبديل؟

StackOverflow https://stackoverflow.com/questions/2363231

سؤال

أواجه صعوبة في الفهم ، لماذا يتطلب برنامج التحويل البرمجي استخدام عبارة Break. ليس من الممكن تفويتها لأن السقوط مسموح به الآن. أرى سبب الاستراحة في C أو C ++ ، ولكن هل هو مطلوب هنا.

لماذا ليس سلوكًا مدمجًا لكسر بعد انتهاء القضية؟ أليست مجرد بناء جملة بدون دلالي؟

آسف ، إذا كان سؤال غبي.

تحرير: لا يُسمح بالسقوط إلا عندما تكون القضية فارغة. عندما يكون هناك بيان لا يمكنك حذف بيان الاستراحة. لذلك ، إنها مسألة مختلفة.

هل كانت مفيدة؟

المحلول

المترجم لا "يحتاج" إلى حد كبير بيانات الاستراحة ، فهو يطالبهم.

كان هذا قرارًا تصميمًا ، يمكن مقارنته بطلب استخدام ref عند استدعاء طريقة باستخدام معلمة مرجعية.

إنه يحافظ على الكود بشكل دلالي من C و C ++ مع القضاء على مخاطر السقوط التي كانت دائمًا "ميزة" قابلة للنقاش للغات C.

نصائح أخرى

كان بيان الاستراحة في C# قرارًا تصميمًا من قبل المبدعين باللغة ... في الأساس أنهم أرادوا بيان استراحة "لا لبس فيه" ، وهو بيان استراحة من شأنه أن يعمل في اتجاه واحد فقط. باختصار ، لم يريدوا السقوط ، وإذا كانوا قد منعوا للتو من خلال السقوط دون تضمين "Break" ، فسيكون ذلك قد كسر التوافق مع C ++.

وقع خلال هو مسموح به إذا كان تعبير الحالة فارغًا:

case Foo:  // fallthrough allowed.
case Bar:
    Console.WriteLine ("Foo or Bar");
    break; // required

أنه غير مسموح به هو فكرة خاطئة شائعة في نفس الدوري مثل "لا يمكنك تعيين القيم في ما إذا كانت الشروط" *


* تستطيع. القاعدة هي مجرد أن القيم المنطقية فقط مسموح بها في ما إذا كانت الشروط ، و x=false مع bool x; هو قيمة منطقية.

عادة ما يكون هذا النوع من الكود خطأ:

// Contrived calculator demostration
decimal x = 5m;
decimal y = 10m;
decimal result = 0m;
string blah = "Divide";

// .. other code omitted

switch(blah) {
    case "Divide":
        result = x / y;

    case "Multiply":
        result = x * y;

    case "Add":
        result = x + y;

    case "Subtract":
        result = x - y;

    default:
        MessageBox.Show("Not a valid operation");

}

ومع ذلك ، لا يمكن للمترجم أن يفترض أن الفواصل المفقودة هي خطأ. بقدر ما يعلم ، فأنت تريد حقًا أن تسقط الحالات.

ببساطة ، على افتراض أن الفواصل يجب أن تكون في نهاية كل حالة من شأنها أن تتداول خطأً واحدًا لخطأ مختلف.

لذا ، بدلاً من ذلك ، لم يسمح مصممو اللغة بالخروج من الحالات غير الفارغة ورمي خطأ إذا حذفتهم.

إذا كنت بحاجة إلى مشاركة رمز بين الحالات غير الفارغة ، فضعها في أ private (ربما static) طريقة واتصل بها من هناك.

ملاحظة أخيرة: الحالات الفارغة التي تتساقط هي كل ما يتوقع من قضية فارغة القيام بها ، وهذا هو السبب في أنه مسموح به.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top