क्या 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;}
दूसरी ओर, यदि आप वीबी, विज़ुअल स्टूडियो 2008 में टर्नरी ऑपरेटर चाहते हैं और बाद में एक नया If()
ऑपरेटर प्रदान करते हैं जो C # के टर्नेरी ऑपरेटर की तरह काम करता है। यह यह जानने के लिए कि यह किस प्रकार लौट रहा है, टाइप प्रकार का उपयोग करता है, और यह वास्तव में एक फ़ंक्शन के बजाय एक ऑपरेटर है। इसका अर्थ है कि पूर्व मूल्यांकन के भावों से कोई समस्या नहीं है, भले ही इसमें फ़ंक्शन शब्दार्थ है।
VB.NET:
If(someBool, "true", "false")
सी#
someBool ? "true" : "false";
टर्नरी ऑपरेटर
bool a = true;
string b = a ? "if_true" : "if_false";
booleanExpression ? trueValue : falseValue;
उदाहरण:
string itemText = count > 1 ? "items" : "item";
http://zamirsblog.blogspot.com/2011/12/c-vb-equivalent-of-iif.html
यह सीमित है कि आप वहां बयान नहीं दे सकते। आप केवल मान (या वे चीजें जो लौटा सकते हैं / मूल्यों का मूल्यांकन कर सकते हैं), वापस लौटने के लिए
यह काम करता है ('ए' वर्ग ब्ला के भीतर एक स्थिर इंट है)
Blah.a=Blah.a<5?1:8;
(गोल कोष्ठक स्पष्ट रूप से बराबर और प्रश्न चिह्न के बीच होते हैं)।
यह काम नहीं करता है।
Blah.a = Blah.a < 4 ? Console.WriteLine("asdf") : Console.WriteLine("34er");
or
Blah.a = Blah.a < 4 ? MessageBox.Show("asdf") : MessageBox.Show("34er");
तो आप केवल रिटर्न मानों के लिए c # ternary ऑपरेटर का उपयोग कर सकते हैं। तो यह काफी अगर की एक छोटा रूप की तरह नहीं है। जावास्क्रिप्ट और शायद कुछ अन्य भाषाएं आपको वहाँ वक्तव्य देती हैं।
Action
हालांकि आप जो चाहते हैं वह करने के लिए उपयोग कर सकते हैं ।
iif
या त्रैमासिक ऑपरेटर, आप वहाँ एक वापसी मान डालते हैं जैसे Blah.a = Blah.a < 4 ? Console.WriteLine("asdf"); return 1: Console.WriteLine("34er") ; return 2;
कि अगर यह अनुमति देता है कि, यह काम करेगा, लेकिन जाहिर है यह नहीं है। और हाँ, यह अभी भी एक मूल्य निर्धारित कर रहा है, और नहीं यह कोई नई विधि नहीं कह रहा है।