مشغل COALESCE في C#؟
-
29-09-2019 - |
سؤال
أعتقد أنني أتذكر رؤية شيء مشابه لـ ؟: عامل ثلاثي في C# ، لم يكن له سوى جزأين وسيعودان القيمة المتغيرة إذا لم تكن فارغة وقيمة افتراضية إذا كانت كذلك. شيء من هذا القبيل:
tb_MyTextBox.Text = o.Member ??SOME OPERATOR HERE?? "default";
في الأساس ما يعادل هذا:
tb_MyTextBox.Text = o.Member != null ? o.Member : "default";
هل يوجد مثل هذا الشيء أم أتخيل رؤية هذا في مكان ما؟
المحلول
نعم:
tb_myTextBox.Text = o.Member ?? "default";
http://msdn.microsoft.com/en-us/library/ms173224(vs.80).aspx
نصائح أخرى
حسنًا ، إنه ليس تمامًا مثل المشغل الشرطي, ، لكنني أعتقد أنك تفكر في مشغل الفحم الخالي (؟؟). (أعتقد أنك قلت أنه "مشابه" :) لاحظ أن "Ternary" يشير فقط إلى عدد المعاملات التي يكون المشغل - لذلك في حين أن المشغل المشروط هو عامل ثلاثي ، فإن مشغل الفحم الخالي من المشغل الثنائي.
يأخذ هذا النموذج على نطاق واسع:
result = first ?? second;
هنا second
سيتم تقييم فقط إذا first
باطل. لا يجب أن يكون هدف المهمة - يمكنك استخدامه لتقييم وسيطة الطريقة ، على سبيل المثال.
لاحظ أن المعامل الأول لديها أن تكون قابلة للبطولة - لكن الثانية لا. على الرغم من وجود بعض التفاصيل المحددة حول التحويلات ، في الحالة البسيطة ، فإن نوع التعبير الكلي هو نوع المعامل الثاني. بسبب الارتباط ، يمكنك تكديس استخدامات المشغل بدقة أيضًا:
int? x = GetValueForX();
int? y = GetValueForY();
int z = GetValueForZ();
int result = x ?? y ?? z;
لاحظ كيف x
و y
قابلة للإلغاء ، لكن z
و result
لا. بالطبع، z
استطاع أن تكون قابلة للاشاحة ، ولكن بعد ذلك result
يجب أن تكون قابلة للإلغاء أيضًا.
في الأساس ، سيتم تقييم المعاملات بالترتيب الذي تظهر في الكود ، مع توقف التقييم عندما يجد قيمة غير فنية.
أوه ، وعلى الرغم من أن ما ورد أعلاه يظهر من حيث أنواع القيمة ، فإنه يعمل مع أنواع المراجع أيضًا (والتي هي ( دائماً لاغية).
من المضحك أنك استخدمت "؟؟ بعض المشغل هنا ؟؟" ، كمشغل تبحث عنه هو "؟؟" ، أي:
tb_MyTextBox.Text = o.Member ?? "default";
نعم ، يطلق عليه المشغل الفارغ: