2012-04-24 19 views
15

कई बार जिसमें मैं एक इनपुट पाठ है देखते हैं,सी # खाली स्ट्रिंग -> शून्य?

और उसके खाली (उपयोगकर्ता फ्लॉप किसी भी पाठ लिखें) यदि - मैं डीबी क्वेरी "अशक्त"

और नहींString.Empty. को भेजना चाहते हैं (या "")

तो मैं लगता है मेरे आत्म यह एक बहुत कुछ कर:

var mySqlValue = string.IsNullOrEmpty(tbCustomerId.Text)?null:tbCustomerId.Text; 

यह मेरे लिए बदसूरत लगता है।

.net विपरीत परिदृश्यों के लिए अन्य समाधान का एक बहुत देता है:

 string.IsNullOrEmpty 
     string.IsNullOrWhiteSpace 
     myProblemVal ?? myDefultVal 

मैं जानता हूँ कि इस विस्तार के तरीकों से हल किया जा सकता है - और मैं इसे कैसे करना है पता ..

लेकिन क्या कुछ बेहतर है?

क्या कोई बुद्धिमान कोड है: "if its empty -> null"।

public static class Extensions { 
    public static string NullIfWhiteSpace(this string value) { 
     if (String.IsNullOrWhiteSpace(value)) { return null; } 
     return value; 
    } 
} 

जो तुम उस तरह इस्तेमाल कर सकते हैं:

var mySqlValue = tbCustomerId.Text.NullIfWhiteSpace(); 

मैं वास्तव में नहीं पता है कि आप कुछ विस्तार तरीकों की तुलना में बेहतर द्वारा कल्पना

+0

निम्नलिखित समस्या भी है: यदि '.Text' एक संपत्ति है (यानी 'प्राप्तकर्ता' पहुंचने वाला कॉल), पहली बार गेटर कहलाता है, तो यह एक लंबी स्ट्रिंग वापस कर सकता है," जॉन डो " '। हम टर्नरी '?: 'सशर्त ऑपरेटर के अंतिम" घटक "का मूल्यांकन करते हैं। लेकिन यह फिर से 'टेक्स्ट' गेटर' कहता है, और इस बार यह '" "वापस आ सकता है। इसलिए बहुमूल्य में आपको 'टेक्स्ट' की स्थानीय चर प्रतिलिपि लेनी होगी। यदि आप एक विस्तार विधि का उपयोग करते हैं, तो यह आवश्यक नहीं है। –

+0

यदि आप एक विस्तार विधि का उपयोग करते हैं, तो आप जांच से पहले स्ट्रिंग को पहले ट्रिम कर सकते हैं, जो एकल अभिव्यक्ति में करना मुश्किल है। – toddmo

उत्तर

5

लेकिन क्या कुछ बेहतर है?

नहीं, हालांकि मैं तर्क दूंगा कि आप प्रश्न (विस्तार विधियों) में जो वर्णन करते हैं वह बिल्कुल ठीक है। और जैसा कि आप प्रश्न में वर्णन करते हैं, दूसरी दिशा में आपके पास शून्य-सहकर्मी है।

+0

मुझे सुनकर खुशी होगी कि 'बिल्कुल ठीक' नहीं है –

+0

@ रॉय ??? उलझन में; एक विस्तार विधि यहां बदसूरत नहीं है ... –

+0

@ रॉय मेरा मतलब विस्तार विधि दृष्टिकोण - मैंने स्पष्ट किया है कि –

17

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

+0

मैंने स्पष्ट रूप से लिखा था 'मुझे पता है कि इसे एक्सटेंशन विधियों द्वारा हल किया जा सकता है - और मुझे पता है कि यह कैसे करें ..' - क्या कुछ बेहतर है –

+0

ओह, उस भाग को नहीं देखा :) लेकिन मुझे और अधिक सुरुचिपूर्ण नहीं दिख रहा है मार्ग। – Botz3000

+5

भले ही वह कहता था कि वह जानता था, अगर यह – Matthew

3

अपने स्वयं के स्थिर प्रणाली की घोषणा:

public static string NullIfEmpty(string value) 
{ 
    return string.IsNullOrEmpty(value) ? null : value; 
} 

कर

MyHelper.NullIfEmpty (मान) स्ट्रिंग प्रकार का एक स्थिर विधि के लिए एक कॉल से भद्दा नहीं है ... और यह लेखन की तुलना में क्लीनर लगता है "string.IsNullOrEmpty (tbCustomerId.Text)? शून्य: tbCustomerId.Text" हर बार।

+3

है, तो यह संभवतः पूरे समूह के बजाय सबसे अच्छा तरीका है, यदि आप इस विधि को एक स्थिर वर्ग में रखते हैं, और 'इस' कीवर्ड का उपयोग करते हैं, तो आप इसे एक विस्तार विधि की तरह उपयोग कर सकते हैं ;) - – Matthew

+4

लिखने के लिए बहुत छोटा आप इसे कम से कम एक विस्तार विधि बना सकते हैं, नहीं? –

+0

बेशक आप एक विस्तार विधि बना सकते हैं लेकिन मुझे वास्तव में यह पसंद नहीं है, खासकर शून्य संदर्भों पर। व्यक्तिगत चयन। – Guillaume

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