سؤال

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

bool? testBool = null;  
string result;  
result = (testBool ?? false ? "Yes" : "No");  

تعديل: اعتذاري للجميع للحصول على بعض الكود الرهيب! هنا مثال عمل ..
أنا غزيرة قليلا من سرعة الردود. كنت سأحذف هذا وأفعل ذلك بشكل صحيح، ولكن كان لديه بالفعل 4 ردود!

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

المحلول

سأضيف بارينجا حتى توضح ما يحدث - أي.

bool? testbool = null;
string result;
result = (testbool ?? false) ? "Yes" : "No";

مع ذلك، سأكون بخير معها. بدون ذلك، كان علي أن أدرسها قليلا لمعرفة ما كان يحدث (إذا كان ذلك حتى تجمع - لا أعرف ترتيب العمليات قبالة رأس رأسي؟: مقابل ؟؟)

نصائح أخرى

إنه بعض الشيء على الجانب الخبيذر، ليس من الواضح حتى إذا تم تقييم التعبير على النحو التالي:

string result = (testbool ?? false) ? "Yes" : "No";

أو:

string result = testbool ?? (false ? "Yes" : "No");

يمكنك استعمال ال GetValueOrDefault طريقة النوع النظري بدلا من ?? المشغل لجعله أكثر قراءة:

bool? testbool = null;
string result = (testbool.GetValueOrDefault(false) ? "Yes" : "No");

تحرير: السؤال الأصلي المستخدم int?. وبعد تم الآن ثابت.

لن يترجم هذا الرمز حتى نعم، نعم، أود أن أقول أنه كان مشفرة للغاية.

الأخطاء المطبعية جانبا، حقيقة أنك نشرتها دون بسهولة مراقب أن هناك مشكلة (تحاول استخدام bool على RHS من ؟؟، عندما يكون LHS int?) يقترح أنها ليست فكرة جيدة حتى عندما تحصل عليه بشكل صحيح.

سأحتاج إلى رؤية مثال عالمي حقيقي، لكنني أعتقد أنني كنت مستخدم قم بتقسيم هذا في عبارة واحدة باستخدام مشغل التنافس الفاتح، ثم آخر باستخدام المشغل الشرطي. اخر اختيار هو استخدام سلوك الأنواع المطلقة فيما يتعلق بالمشغلين ... ولكن مرة أخرى، هذا معقول غامض. (أنا فقط اضطررت لتذكير نفسي بالضبط ما هو هذا السلوك!)

أحب المشغل الاهتمام الفارغ بشكل عام، لكنني أعتقد أن الجمع بينها مع المشغل الشرطي فقط يجعلها قليلا للحجب. أعتقد أنني ربما أقبلها في حالة وجود فائدة مهمة لها تعبيرا واحدا (على سبيل المثال عن التهيئة حيث يتم إدخال البديل طريقة إضافية) ولكن بشكل عام أفضل تقسيمه إلى بيانين.

تحرير: بديل واحد في هذه حالة معينة هي مجرد مقارنة مع "صحيح" - والتي تبدو زائدة عن الحاجة، ولكنها ليست في حالة bool?:

result = (testBool == true) ? "Yes" : "No";

الأقواس ليست ضرورية، بالطبع، ولكن إضافة وضوح المنظمة البحرية الدولية.

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

result = (testBool == false) ? "No" : "Yes";

لفه وأعتقد أنه على ما يرام.

string result = (testbool ?? false) ? "Yes" : "No";

خلاف ذلك النظام المقصود للعمليات، حتى لو كان يعمل، ليس واضحا.

(تحرير: جوناثان ضربني من قبل قرصة.)

لا ينبغي أن يكون

bool? testbool = null;

?

لا أجد ضروري لاستخدام nullable هنا. هذا يجعلني أفكر مرتين، لذلك أنا حقا رمز

bool testbool = false;
string result;
result = testbool ? "Yes" : "No";

لا أعرف إذا كان مثالك غير مكتمل، لكنني أعتقد أن تهيئة المتغير إلى القيمة الافتراضية هو مشرق من استخدام nullable ثم ؟؟ المشغل لتعيين القيمة بعد الإعلان.

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