2012-07-02 9 views

उत्तर

7

वे समीकरण की जांच कर रहे हैं, लेकिन वे अलग-अलग चीजों की जांच के लिए हो सकते हैं।

If IsNothing(TestString) Then 

और

If TestString = Nothing Then 

विभिन्न परीक्षण कर रहे हैं - पहले शायद ही कभी इस्तेमाल किया जाता है, क्योंकि typicaly आप केवल वास्तव में अगर यह एक गैर-रिक्त मान है जानना चाहते हैं। लेकिन यह एक खाली स्ट्रिंग, या एक वैकल्पिक पैरामीटर के उपयोग का पता लगाने के लिए एक DB में अलग ढंग से एक शून्य मान anf के इलाज के लिए इस्तेमाल किया जा सकता (दोनों ही मामलों अतिरिक्त काम की आवश्यकता होती है सुनिश्चित करें कि आप inadvertantly एक गलत मान में पर्ची नहीं करते हैं, तो कुछ हद तक के लिए कमजोर)।

दिए गए उदाहरण में, परीक्षण वास्तव में, एक सा अधिक शब्दों और भ्रामक है अगर है कि क्या आप परीक्षण करना चाहते है तो String.IsNullOrEmpty (TestString) फिर

इसके बारे में जाने के लिए रास्ता नहीं है तो। अगर वह "और" एक "या" माना जाता था तो यह IsNothing (टेस्टस्ट्रिंग) का उपयोग करने के लिए समझ में आता है।

14

Nothing सब पर कोई स्ट्रिंग (अन्य भाषाओं में null) है, जो एक खाली स्ट्रिंग ("") है, जो वास्तव में एक स्ट्रिंग है से अलग है होगा।

हालांकि, जांच If Not String.IsNullOrEmpty(TestString) Then साथ प्रतिस्थापित किया जाना चाहिए, जो यह स्पष्ट वास्तव में आप क्या कर रहे बनाता है।

मैं सिर्फ LINQPad में यह कुछ के साथ चारों ओर निभाई है, और कुछ हल्का आश्चर्य की बात पाया। VB.NET में:

Dim s1 as string = Nothing 
Dim s2 as string = "" 

Console.WriteLine(s1 is Nothing) 'True 
Console.WriteLine(s2 is Nothing) 'False 

Console.WriteLine(s1 = "") 'True 
Console.WriteLine(s2 = "") 'True 

Console.WriteLine(string.IsNullOrEmpty(s1)) 'True 
Console.WriteLine(string.IsNullOrEmpty(s2)) 'True 

में सी #:

string s1 = null; 
string s2 = ""; 

Console.WriteLine(s1 == null); //True 
Console.WriteLine(s2 == null); //False 

Console.WriteLine(s1 == ""); //False 
Console.WriteLine(s2 == ""); //True 

Console.WriteLine(string.IsNullOrEmpty(s1)); //True 
Console.WriteLine(string.IsNullOrEmpty(s2)); //True 

मैं काफी है कि उम्मीद नहीं थी। ऐसा प्रतीत होता है कि वीबी.Net एक खाली स्ट्रिंग के रूप में Nothing का इलाज करता है। मेरा अनुमान वीबी के पुराने संस्करणों के साथ संगतता के लिए है।

यह इस प्रकार के चेक के लिए String.IsNullOrEmpty का उपयोग करने के लिए और अधिक मजबूत करता है, क्योंकि यह अधिक स्पष्ट है कि आप किस चीज की जांच कर रहे हैं, और अपेक्षित कार्य करता है।

+1

+1 ने मेरे मुंह से शब्दों को चुरा लिया। एरिच, अगर एक स्ट्रिंग सेट नहीं की गई है तो यह कुछ भी नहीं है, अगर एक स्ट्रिंग = "" खाली है। –

+0

मैं पूरी तरह उलझन में हूं। एमएसडीएन पर यह कहता है कि वीबी में स्ट्रिंग प्रकार के चर के लिए, कुछ भी नहीं = ""। यदि ऐसा लगता है कि उपरोक्त अनावश्यक है –

+1

मेरा अनुमान यह होगा कि यह किसी ऐसे व्यक्ति द्वारा किया गया था जो सी # से अधिक परिचित था, जिसमें अलग-अलग व्यवहार हैं, और IsNullOrEmpty के बारे में नहीं जानते हैं। –

3

हाँ, VB.NET "" में परिभाषा से Nothing=, <> के लिए सहित और सभी वीबी कार्यों के बराबर है; जब तक कि आप स्पष्ट रूप से अंतर की परवाह नहीं करते हैं, जैसे Is के साथ जांच कर।

बेशक, सामान्य .NET कार्यों का उपयोग करते समय आप अंतर देखेंगे और विशेष रूप से विधियों जहां str.Method एक नल संदर्भ अपवाद के साथ विफल हो जाएगा।

BTW मैं ओपी में अंश लगता होगा सी # कोड है (बुरी तरह) में बदल दिया।

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