2010-08-04 10 views
6

String.IsNullOrEmpty() एक बेहद अच्छी तरह से प्रयुक्त विधि प्रतीत होता है और मुझे लगता है कि इसके लिए कुछ शॉर्टेंड था। कुछ ??? जैसा कि इसे नल कोलेसे ऑपरेटर के समान संदर्भ में उपयोग किया जाएगा, लेकिन खाली और नल स्ट्रिंग के लिए परीक्षण करने के लिए बढ़ाया जाएगा। अर्थात।क्या String.IsNullOrEmpty ऑपरेटर के लिए कोई मामला है?

string text = something.SomeText ??? "Not provided"; 

इस पर आपकी राय क्या होगी? क्या यह अनावश्यक रूप से भाषा को फूट जाएगा? क्या यह अन्य मध्य-स्तर के संचालन के लिए बाढ़गाड़ियों को संकलक के साथ इतना गहरा एकीकरण प्रदान करेगा? या यह भाषा के लिए एक उपयोगी जोड़ होगा।

+7

विचार का विरोध किया है, लेकिन के बारे में सोचा भय? नहीं, ??, ???, ????, ?????, ??????, ??????? आदि – taylonr

+3

यह क्या हासिल करता है? एक भाषा का उद्देश्य प्रत्येक कथन को एक पंक्ति पर जोड़ना नहीं है .... या है ना? कल्पना करें कि सिंगल लाइन प्रोग्राम .... –

+0

सी # भाषा में बहुत से विशेष 'स्ट्रिंग' ज्ञान हैं (देखें कि कैसे "स्ट्रिंग" + "कॉन्सटेनेशन" + "काम करता है" ' –

उत्तर

15

फिल Haack blogged about this थोड़ी देर पहले। असल में, वह तुम्हें

var text = someString.AsNullIfEmpty() ?? "Not provided."; 

विस्तार विधि करने की सुविधा देता है कि string पर एक विस्तार विधि है पता चलता है बहुत ही सरल:

public static string AsNullIfEmpty(this string str) 
{ 
    return !string.IsNullOrEmpty(str) ? str : null; 
} 

उन्होंने यह भी string.IsNullOrWhitespace() विधि के साथ बस खाली करने के बजाय खाली स्थान के लिए जाँच एक संस्करण का सुझाव .NET 4 से, साथ ही IEnumerable<T> इंटरफ़ेस के लिए समान एक्सटेंशन।

उन्होंने यह भी इस बात के लिए ??? जैसे नए ऑपरेटरों को शुरू करने के बारे में बात करती है, लेकिन निष्कर्ष निकाला है कि यह उपयोगी तुलना में अधिक भ्रमित हो सकता है - सब के बाद, इन विस्तार के तरीकों को शुरू आप एक ही बात कर सकते हैं, लेकिन यह अधिक पठनीय है, और यह उपयोग कर रहा है शॉर्टंड सिंटैक्स कि "हर कोई पहले से ही जानता है"।

+0

समस्या डेवलपर्स के रूप में है, हम इन geeky गतिविधियों पर लटका दिया है। अपने आप से पूछें, "क्या यह इस सॉफ़्टवेयर के उपयोगकर्ताओं की मदद करेगा", "क्या यह इस सॉफ़्टवेयर का उपयोग करने वाली कंपनी के लिए बेहतर निचली लाइन बना देगा" ??? –

+0

अगर आप नए विस्तार विधि को लागू करना चाहते हैं, हो सकता है इस संस्करण को और अधिक स्पष्ट स्थिर वर्ग StringExtensions { सार्वजनिक स्थैतिक स्ट्रिंग ValueOrDefault इरादों (इस स्ट्रिंग मान, स्ट्रिंग DefaultValue) { वापसी string.IsNullOrEmpty (मान) व्यक्त करेंगे? डिफ़ॉल्ट वैल्यू: मान; } } – desco

+0

@ मिच: इन एक्सटेंशन विधियों को पेश करने का मुख्य कारण यह कोड नहीं है (केवल) यह कोड अच्छा दिखने के लिए - यह कोड पुनरावृत्ति को कम करने के लिए भी है। आपने कितनी बार खुद को 'शून्य', खाली या सफेद स्थान के लिए स्ट्रिंग की जांच करना चाहते हैं, और यदि आवश्यक हो तो डिफ़ॉल्ट मान प्रदान करें? मेरे पास हर व़क्त करने को यही काम है। और इन विस्तार विधियों के साथ, मैं * सॉफ़्टवेयर लिखते समय समय बचाता हूं, जो कि कंपनी के लिए सॉफ़्टवेयर लिखता है (कम से कम)। –

6

फिल Haack ने अपने ब्लॉग पर इस सटीक ऑपरेशन के बारे में बात करती है। आपको अपना लेख Null Or Empty Coalescing देखना चाहिए। ??? तरह

विशेष उद्देश्य ऑपरेटरों एक फिसलन ढलान है। क्यों रोक - क्यों एक "शून्य या खाली या खाली स्थान के" ऑपरेटर का परिचय नहीं: ????। फिल वास्तव में, अपने लेख में इस बारे में बात करते हैं। उनका समग्र निष्कर्ष यह है कि ऐसे ऑपरेटर सहायक से ज्यादा भ्रमित होंगे।

अंत में आप कई अलग अलग कार्यों के ले सकता है एक उन्हें प्रतिनिधित्व करने के लिए ऑपरेटरों का आविष्कार - दुर्भाग्य से, संभावना है कि भाषा की पठनीयता को नष्ट कर देगी।

+0

श्वास ... सिर्फ इसलिए कि मैं कुछ उदाहरण लिखना चाहता था, आपने मुझे एक मिनट से भी कम समय तक हराया ...! ;) –

+0

@ टॉमस: इस प्रश्न पर आपके स्कोर को चोट पहुंचाने लगती नहीं है। अच्छी नौकरी। – LBushkin

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