क्या VB.NET में एक सशर्त टर्नरी ऑपरेटर है?


446

पर्ल (और अन्य भाषाओं) में एक सशर्त टर्नरी ऑपरेटर को इस तरह व्यक्त किया जा सकता है:

my $foo = $bar == $buz ? $cat : $dog;

क्या VB.NET में एक समान ऑपरेटर है?


13
एक टर्नरी ऑपरेटर कोई भी ऑपरेटर होता है जो तीन ऑपरेंड लेता है, जैसे बाइनरी ऑपरेटर को दो और एक यूनीरी ऑपरेटर को एक लेता है। ?:: ऑपरेटर टर्ने ऑपरेटर का एक विशिष्ट उदाहरण है, परिभाषा नहीं।
ज़ोबा

जवाबों:


597

संस्करण पर निर्भर करता है। IfVB.NET 2008 में ऑपरेटर एक त्रिगुट ऑपरेटर (और साथ ही एक अशक्त संघीकरण ऑपरेटर) है। यह सिर्फ पेश किया गया था, 2008 से पहले यह उपलब्ध नहीं था। यहाँ कुछ और जानकारी दी गई है: विजुअल बेसिक

उदाहरण:

Dim foo as String = If(bar = buz, cat, dog)

[संपादित करें]

2008 से पहले यह था IIf, जो Ifऊपर वर्णित ऑपरेटर के लिए लगभग समान रूप से काम करता था ।

उदाहरण:

Dim foo as String = IIf(bar = buz, cat, dog)

15
2008 से पहले यह आईआईएफ था, जो आपके लिंक में वर्णित आईएफ ऑपरेटर के लिए लगभग समान रूप से काम करता था।
ज़ोबा

128
... महत्वपूर्ण अंतर के साथ कि Iif (), एक फ़ंक्शन होने के नाते, हमेशा परिणामी और वैकल्पिक दोनों का मूल्यांकन किया, जबकि नया यदि केवल उनमें से एक का मूल्यांकन करता है।
ग्रेग हेविगेल

6
इसका क्या मतलब है? यदि (स्थिति, सत्य-भाग, मिथ्या-भाग)। क्या मैं संस्कार दे सकता हूं?
केबविष्णु

10
मैं एक विशाल सी आदमी हूं, लेकिन मुझे पारंपरिक टर्नरी ऑपरेटर की तुलना में यह सिंटेक्स क्लीनर मिलता है।
क्रश करें

11
एक और महत्वपूर्ण अंतर: Iifहमेशा एक प्रकार की वस्तु लौटाता है Object, जबकि If(bool, obj, obj)विकल्प सख्त होने पर टाइप-चेकिंग की अनुमति देता है। ( Dim var As Integer = Iif(true, 1, 2)विकल्प के साथ सख्ती से संकलन नहीं करेंगे क्योंकि आप आसानी से लिख Dim var As Integer = Iif(true, new Object(), new Object())सकते हैं। आप Dim var As Integer = If(true, 1, 2)विकल्प पर कड़ाई से लिख सकते हैं , क्योंकि यह टाइप किया हुआ होगा।)
जोसेफ नीड्स

78

आईआईएफ हमेशा वीबी में उपलब्ध रहा है, यहां तक ​​कि वीबी 6 में भी।

Dim foo as String = iif(bar = buz, cat, dog)

यह एक सच्चा ऑपरेटर नहीं है, जैसे कि, लेकिन Microsoft में एक फ़ंक्शन। विजुअलबासिक नामस्थान।


31
Iif केवल एक टर्नरी ऑपरेटर के करीब है, हालांकि - जिसका अर्थ है कि आप इसे हर हालत में उपयोग नहीं कर सकते हैं कि आप एक इफ एल्स (या टर्नरी ऑपरेटर) करेंगे। उदाहरण के लिए, मान = Iif (1 = 1, 0, 1/0) उड़ जाएगा, लेकिन मान = यदि (1 = 1, 0, 1/0) नहीं होगा ...
Beep beep

4
VB शॉर्ट सर्किट मूल्यांकन (AndAlso ऑपरेटर को छोड़कर) का समर्थन नहीं करता है, इसलिए VB प्रोग्रामर वास्तव में उम्मीद नहीं करते हैं कि वे सुरक्षित रूप से आधे ऑपरेशन का मूल्यांकन कर सकते हैं। लेकिन लिया गया बिंदु, आईआईएफ भी एक हैक फ़ंक्शन है जिसे पिछड़े संगतता के लिए रखा गया था अन्यथा यह एक वास्तविक ऑपरेटर होगा।
क्रिश एरिकसन


2
Iif एक नियमित विधि कॉल है और सभी मापदंडों का मूल्यांकन करता है। यह टर्नरी नहीं है। Se dotnetslackers.com/VB_NET/…
लॉसमनोस

3
जैसा कि मैंने कहा, यह एक सच्चा ऑपरेटर नहीं है, और vb6 शॉर्ट सर्किट मूल्यांकन का समर्थन नहीं करता है, इसलिए यह हमेशा वैसे भी लाइन पर सभी कार्यों का मूल्यांकन करता है।
क्रिश एरिकसन 19

23

यदि () निकटतम समतुल्य है, लेकिन यदि आपने "ऑप्शन स्ट्रिक्ट ऑफ" सेट किया है, तो आने वाले रूपांतरणों से सावधान रहें

उदाहरण के लिए, यदि आपकी सावधानी नहीं है तो आप कुछ इस तरह की कोशिश कर सकते हैं:

Dim foo As Integer? = If( someTrueExpression, Nothing, 2)

"फू" को 0 का मान देगा!

मुझे लगता है '?' ऑपरेटर # C के बराबर होगा और इसके बजाय संकलन विफल होगा


8
बस पूर्णता के लिए, उस अभिव्यक्ति को लिखने का बेहतर तरीका है Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
मार्क फर्ड

9
ध्यान दें कि यह भी साथ होता है Option Strict On। कारण यह है कि NothingVB.NET में C # के default(T)बजाय के बराबर है null
हेनजी

1
और किसी के लिए भी Integer?इसका मतलब है कि यह
अशक्त है

1
अशक्त प्रकारों के लिए निहित रूपांतरण पर अटक जाने वाले किसी व्यक्ति के लिए - इस उत्तर को क्यों और कैसे वर्कअराउंड के लिए इस उत्तर को देखें जो लौटने से पहले तर्क देता है ( CType(Nothing, DateTime?)।
काइलमिट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.