c# - كامل - تمارين سي شارب




لماذا لا يؤدي نول== فالس إلى خطأ في الترجمة في c#؟ (2)

انها قانونية لأن المشغل مقارنة رفع يستخدم. إذا قارنت bool إلى قيمة null ، يتم تحويل كل من Nullable<bool> ضمنا إلى Nullable<bool> ويتم استخدام مشغل المقارنة ل Nullable<bool> النهاية. يمكنك الحصول على تحذير لأنه من الواضح، هو دائما كاذبة.

هذا السؤال له إجابة هنا:

هذا ليس لحل أي مشكلة معينة. ببساطة سؤال المترجم.

لماذا لا تؤدي التعليمات البرمجية التالية إلى خطأ في الترجمة البرمجية؟ إنها تقارن نوع المرجع بنوع بدائي. يجب أن تفسر كل من لاغية وكاذبة إلى شيء للمترجم للقيام المقارنة. أو هو محلل ببساطة مسح لهذا النمط واستبدالها مع كاذبة؟

if(null == false) { }

وتنص الفقرة 7-10-6 من مواصفات اللغة (عوامل المساواة في نوع المرجع) على ما يلي:

يسمح x == null بنية x == null على الرغم من أن T يمكن أن يمثل نوع قيمة، ويتم تعريف النتيجة ببساطة لتكون كاذبة عندما T هو نوع القيمة.

ويتطلب هذا الحكم أن يكون null == false false ، وليس خطأ مترجم.







compiler-construction