سؤال

هل يوجد IIf يعادل في C#؟أو اختصار مماثل؟

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

المحلول

يحتوي C# على ? عامل التشغيل الثلاثي، مثل لغات النمط C الأخرى.ومع ذلك، هذا لا يعادل تماما IIf();هناك نوعان من الاختلافات الهامة.

لشرح الفرق الأول، حجة الجزء الكاذب لهذا IIf() تسبب المكالمة أ DivideByZeroException, ، على الرغم من أن الحجة المنطقية هي True.

IIf(true, 1, 1/0)

IIf() هي مجرد دالة، وكما هو الحال مع جميع الدوال، يجب تقييم جميع الوسائط قبل إجراء الاستدعاء.ضع طريقا اخر، IIf() يفعل لا ماس كهربائى بالمعنى التقليدي.من ناحية أخرى، فإن هذا التعبير الثلاثي يؤدي إلى حدوث ماس كهربائي، وبالتالي فهو جيد تمامًا:

(true)?1:1/0;

والفرق الآخر هو IIf() ليس من النوع الآمن.يقبل ويعيد وسيطات النوع Object.المشغل الثلاثي يكون اكتب آمنة.ويستخدم الاستدلال النوعي لمعرفة الأنواع التي يتعامل معها.لاحظ أنه يمكنك إصلاح ذلك بسهولة شديدة باستخدام منتجك العام IIF(Of T)() التنفيذ، ولكن خارج الصندوق، هذا ليس هو الحال.

إذا كنت تريد حقا IIf() في C#، يمكنك الحصول عليه:

object IIf(bool expression, object truePart, object falsePart) 
{return expression?truePart:falsePart;}

أو تنفيذ عام/آمن من النوع:

T IIf<T>(bool expression, T truePart, T falsePart) 
{return expression?truePart:falsePart;}

من ناحية أخرى، إذا كنت تريد عامل التشغيل الثلاثي في ​​VB، فإن Visual Studio 2008 والإصدارات الأحدث توفر عامل تشغيل جديدًا If() المشغل أو العامل الذي يعمل مثل المشغل الثلاثي لـ C#.يستخدم الاستدلال النوعي لمعرفة ما يُرجعه، وهو في الحقيقة عامل تشغيل وليس دالة.وهذا يعني أنه لا توجد مشكلات ناتجة عن التقييم المسبق للتعبيرات، على الرغم من أنها تحتوي على دلالات وظيفية.

نصائح أخرى

وVB.NET:

If(someBool, "true", "false")

وC #

someBool ? "true" : "false";

والمشغل الثلاثي

bool a = true;

string b = a ? "if_true" : "if_false";

ومن المفيد أيضا هي المشغل تتجمع ؟؟:

وVB:

Return Iif( s IsNot Nothing, s, "My Default Value" )

وC #:

return s ?? "My Default Value";
booleanExpression ? trueValue : falseValue;

مثال:

string itemText = count > 1 ? "items" : "item";

http://zamirsblog.blogspot.com/2011/12/c -vb ما يعادل من بين iif.html

وانها المشغل ? الثلاثي

string newString = i == 1 ? "i is one" : "i is not one";

وانها محدودة في أنه لا يمكن وضع البيانات في هناك. يمكنك فقط وضع القيم (أو الأشياء التي ترجع / تقييم للقيم)، للعودة

وهذا يعمل (ع 'هو عدد صحيح ثابت داخل الطبقة بلاه)

Blah.a=Blah.a<5?1:8;

و(بين قوسين الجولة هي impicitly بين متساوين وعلامة الاستفهام).

وهذا لا يعمل.

Blah.a = Blah.a < 4 ? Console.WriteLine("asdf") : Console.WriteLine("34er");
or
Blah.a = Blah.a < 4 ? MessageBox.Show("asdf") : MessageBox.Show("34er");

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

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