سؤال

  1. لماذا المشغل '&' تعريف منطقي?, و المشغل '&&' لا ؟
  2. كيف بالضبط هل هذا 1) منطقي?& منطقي?و 2) منطقي?و منطقي العمل ؟

أي "مثيرة للاهتمام" المشغل دلالات على Nullable?أي طاقتها مشغلي عامة ؟

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

المحلول

المشغلين على Nullable<T> هي "رفعت" المشغلين.ما يعنيه هذا هو:إذا ر قد المشغل T ؟ سوف يكون "رفعت" نظيره.

&& و || ليست حقا المشغلين في & و | - على سبيل المثال ، فإنها لا يمكن أن تكون مثقلة - من ECMA المواصفات 14.2.2 عامل الحمولة الزائدة:

على overloadable الثنائية شركات هي:+ - * / % & | ^ << >> == != > < >= <= فقط مشغلي المذكورة أعلاه يمكن أن تكون فوق طاقتها.ولا سيما أنه ليس ممكن تفرط الأعضاء الوصول ، استدعاء الأسلوب ، أو =, &&, ||, ??, ?:, مؤكد دون رادع ، جديدة ، تشير typeof ، كما هو المشغلين.

وبالمثل ، من ECMA المواصفات ، 14.2.7 رفع المشغلين ، رفعت شركات هي:

من أجل استخدام عوامل التشغيل الأحادية + ++ - -- !~

بالنسبة الثنائية المشغلين + - * / % & | ^ << >>

المساواة بين المشغلين == !=

بالنسبة العلائقية < > <= >=

لذا أساسا الدائرة قصيرة مشغلي لا يعرف رفع المشغلين.

[تحرير:وأضاف ورقة السرير]

  • رفع المشغل:مترجم قدمت المشغل على Nullable<T>, استنادا إلى مشغلي T - على سبيل المثال:على int "+" مشغل يحصل على "رفعت" على int?, تعرف بأنها:

    (int ؟ x, int ؟ y) => (x.HasValue && y.HasValue) ?(x.قيمة + y.القيمة) :(int؟) فارغة ؛

  • عامل الحمولة الزائدة:القانون توفير مخصص تنفيذ المشغل معين نوع ؛ على سبيل المثال decimal و DateTime تقديم مختلف مشغل الزائدة

  • الدائرة قصيرة:السلوك العادي && و || (في العديد من اللغات بما في ذلك C++ و C#) - أيالمعامل الثاني قد لا يكون تقييم - أي

    (expression1, expression2) => expression1() ?expression2() :كاذبة ؛

أو ربما أبسط مثال:

bool someFlag = Method1() && Method2();

إذا Method1() ترجع كاذبة ، ثم Method2() ليس المنفذة (منذ المترجم يعرف مسبقا أن الجواب عموما هو خطأ).وهذا أمر مهم إذا Method2() لديها آثار جانبية, حيث حفظ إلى قاعدة البيانات...

نصائح أخرى

لا توجد الدائرة قصيرة المشغلين (&& ||) تعريف bool?

فقط هي منطقية شاملة أو مشغلي وأنها تتصرف مثل هذا:

x        y      x & y   x | y   
true    true    true    true
true    false   false   true
true    null    null    true
false   true    false   true
false   false   false   false
false   null    false   null
null    true    null    true
null    false   false   null
null    null    null    null

المشغل "&" هي المختصة بالبت المشغل ، في حين أن "&&" هو منطقي المشغل.على logcial "و" المشغل لا يمكن aplied إلى threestate القيمة فقط twostate.

-- وبالإضافة إلى ذلك ، فإن من المنطقي && مشغل جنبا إلى جنب مع المشغل || لا يمكن طاقتها.

2) السبب في أن جميع المشغل يعمل لأنه يعمل على بت واحد, وهو بسيط 1 أو 0.هذا ما العوامل المنطقية هي أساسا, الصواب والخطأ ، 1 ، 0.

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