2010-10-13 12 views
9

मुझे लगता है कि मुझे सी # में ?: ternary operator के समान कुछ दिखाना याद है, जिसमें केवल दो भाग थे और परिवर्तनीय मान वापस कर देंगे यदि यह शून्य नहीं था और डिफ़ॉल्ट मान था। कुछ इस तरह:सी # में Coalesce ऑपरेटर?

tb_MyTextBox.Text = o.Member ??SOME OPERATOR HERE?? "default"; 

मूल रूप से इस के बराबर:

tb_MyTextBox.Text = o.Member != null ? o.Member : "default"; 

ऐसी बात मौजूद है या मैं सिर्फ यह कहीं देखकर कल्पना की थी?

+1

संभावित डुप्लिकेट -> http: // stackoverflow।कॉम/प्रश्न/463155/कैसे-द-टर्नरी-ऑपरेटर-काम –

+3

@ जूनियर लेकिन यह टर्नरी ऑपरेटर के बारे में है, जबकि यह कोलेसिंग ऑपरेटर (शीर्षक के बावजूद) – Rup

+1

@ जूनियर के बारे में है, जबकि मेरे प्रश्न का शीर्षक एक है यदि आप मेरा प्रश्न पढ़ते हैं तो थोड़ा भ्रामक आप देखेंगे कि आपके द्वारा सुझाए गए डुप्लिकेट के साथ इसका कोई लेना-देना नहीं है। –

उत्तर

3

अजीब बात है आप का इस्तेमाल किया यानी "कुछ ऑपरेटर यहाँ ?? ??", के रूप में ऑपरेटर आप देख रहे हैं कि "??",:

tb_MyTextBox.Text = o.Member ?? "default"; 

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

+1

हे, मेरा अवचेतन पहुंच रहा होगा। पता था मैंने इसे कहीं देखा था। –

17

खैर, यह conditional operator के रूप में काफी एक ही नहीं है, लेकिन मुझे लगता है कि आप null coalescing operator की सोच रहे हैं (??)। (मुझे लगता है कि आपने कहा था कि यह "समान" था :) ध्यान दें कि "टर्नरी" केवल ऑपरेटरों के ऑपरेंड की संख्या को संदर्भित करता है - इसलिए सशर्त ऑपरेटर एक टर्नरी ऑपरेटर है, तो नल कोलेसिंग ऑपरेटर एक बाइनरी ऑपरेटर है।

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 भी शून्य हो सकता है।

असल में ऑपरेटरों का मूल्यांकन कोड में दिखाई देने के क्रम में किया जाएगा, मूल्यांकन के साथ जब यह एक गैर-शून्य मूल्य प्राप्त होता है।

ओह, और हालांकि उपरोक्त मान प्रकारों के संदर्भ में दिखाया गया है, यह संदर्भ प्रकारों के साथ भी काम करता है (जो हमेशा शून्य है)।

संबंधित मुद्दे