سؤال

أعتقد أنني أتذكر رؤية شيء مشابه لـ ؟: عامل ثلاثي في 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";

http://msdn.microsoft.com/en-us/library/ms173224.aspx

نعم ، يطلق عليه المشغل الفارغ:

؟ المشغل (مرجع C#) (MSDN)

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