2015-08-25 6 views
6

मैं क्या सी # में नए null ऑपरेटर के साथ एकत्र हुए 6.0 आप कुछ इस तरह कर सकते हैं से:सी # 6.0 एक सशर्त बयान में अशक्त ऑपरेटर

string name = people.FirstOrDefault()?.FullName; 

और यह महान है, लेकिन एक सत्यापन मैं अक्सर पार चलो है कुछ इस तरह:

object name = null; 
if(name != null) { 
    DoSomething(); 
} else { 
    DoSomethingElse(); 
} 

नई null ऑपरेटर के प्रयोजन के देखते हुए, मैं चाहते हैं कुछ इस तरह संभव हो जाना चाहिए:

if(name?) { 
    DoSomething(); 
} else { 
    DoSomethingElse(); 
} 

समस्या मैं क्या समझ में आ से यहाँ है कि जब मूल्य ? जाँच कर रहा है इस तथ्य null में है, यह रिटर्न null है, और आप if बयान के लिए एक bool हालत की जरूरत है। चूंकि आप सीधे null को bool पर परिवर्तित नहीं कर सकते हैं, तो क्या if(name != null) के बिना null ऑपरेटर सी # 6.0 में ऑपरेटर का उपयोग किए बिना इसे जांचने का एक आसान तरीका है?

+12

गंभीरता से? टाइपिंग '! = नल 'पर्याप्त आसान नहीं है? यह स्पष्ट है, यह पठनीय है, डेवलपर जो छह महीने में कोड को देखता है आसानी से समझ सकता है कि यह क्या कर रहा है ... –

+3

ऐसे ऑपरेटर का उद्देश्य क्या होगा? 'अगर (नाम?) लिखने का क्या फायदा है ... 'if (name! = Null)' –

+0

के विरोध में आप जेएस में बस' if (name) 'कर सकते हैं और यह 'null' के लिए मान्य है, लग रहा था मेरे लिए कुछ करीब एक अच्छी बात होगी और यह कि नए अपडेट में हो सकता है, अनुमान नहीं है। –

उत्तर

13

ऐसा करने में कोई बात नहीं है। आप अपने उदाहरण में कोई भी शून्य सहारा नहीं कर रहे हैं - आप बस शून्य की जांच कर रहे हैं।

यदि आप name ऑब्जेक्ट के कुछ सदस्य को देखना चाहते हैं तो बेहतर उपयोग होगा। उदाहरण के लिए:

if (name?.FirstName != null) ... 

लेकिन के रूप में आप देख सकते हैं, यह अभी भी अशक्त के लिए एक सरल तुलना है - हम सिर्फ कुछ इस तरह लिखने के लिए होने से बचाने के coalescing अशक्त प्रयोग किया है:

if (name != null && name.FirstName != null) ... 
+0

मैं मानता हूं कि यह इस सुविधा का बेहतर उपयोग नहीं होगा, हालांकि मैं जेएस में कुछ आसान नाम, अगर (नाम) 'के लिए जा रहा था, जहां यह स्वचालित रूप से' शून्य 'के लिए मान्य होता है। जवाब के लिए धन्यवाद। –

+0

मुझे कुछ ऐसा करना पसंद है: यदि (सत्र? कनेक्टेड) ​​{} लेकिन दुर्भाग्य से यह समर्थित नहीं है और आपको ऐसा कुछ करना है: यदि (सत्र? कनेक्टेड == सत्य) {} – juFo

+3

@juFo यह स्पष्ट है , यदि आप इसके बारे में सोचते हैं - चूंकि आप कोलेसेसिंग ऑपरेटर का उपयोग कर रहे हैं, तो 'बूल' को 'बूल' में बदल दिया गया है ('नल' को सभी नल कोलेसेस के माध्यम से प्रचार करना है)। और 'अगर (डिफ़ॉल्ट (बूल?))' अगर (शून्य) 'की अनुमति के रूप में बिल्कुल उतना ही समझ में आता है - जो कहने के लिए है, बिल्कुल नहीं। आप * क्या कर सकते हैं * (सत्र? कनेक्टेड) ​​का उपयोग किया जाता है। .GetValueOrDefault (false) '- जो कि 'a == true' से बहुत अधिक स्पष्ट है। – Luaan

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