जवाबों:
सबसे अच्छा अभ्यास सबसे उपयुक्त एक का चयन कर रहा है।
.Net फ्रेमवर्क 4.0 बीटा 2 में स्ट्रिंग्स के लिए एक नया IsNullOrWhiteSpace () विधि है जो IsNullOrEmpty () विधि को सामान्य करता है जिसमें खाली स्ट्रिंग के अलावा अन्य सफेद स्थान भी शामिल है।
"व्हाइट स्पेस" शब्द में वे सभी वर्ण शामिल हैं जो स्क्रीन पर दिखाई नहीं देते हैं। उदाहरण के लिए, अंतरिक्ष, लाइन ब्रेक, टैब और खाली स्ट्रिंग सफेद अंतरिक्ष वर्ण हैं * ।
संदर्भ: यहाँ
प्रदर्शन के लिए, IsNullOrWhiteSpace आदर्श नहीं है, लेकिन अच्छा है। विधि कॉल के परिणामस्वरूप एक छोटा प्रदर्शन जुर्माना होगा। इसके अलावा, IsWhiteSpace विधि में स्वयं कुछ अप्रत्यक्ष हैं जिन्हें हटाया जा सकता है यदि आप यूनिकोड डेटा का उपयोग नहीं कर रहे हैं। हमेशा की तरह, समयपूर्व अनुकूलन बुराई हो सकता है, लेकिन यह मजेदार भी है।
संदर्भ: यहाँ
स्रोत कोड की जाँच करें (संदर्भ स्रोत .NET फ्रेमवर्क 4.6.2)
[Pure]
public static bool IsNullOrEmpty(String value) {
return (value == null || value.Length == 0);
}
[Pure]
public static bool IsNullOrWhiteSpace(String value) {
if (value == null) return true;
for(int i = 0; i < value.Length; i++) {
if(!Char.IsWhiteSpace(value[i])) return false;
}
return true;
}
उदाहरण
string nullString = null;
string emptyString = "";
string whitespaceString = " ";
string nonEmptyString = "abc123";
bool result;
result = String.IsNullOrEmpty(nullString); // true
result = String.IsNullOrEmpty(emptyString); // true
result = String.IsNullOrEmpty(whitespaceString); // false
result = String.IsNullOrEmpty(nonEmptyString); // false
result = String.IsNullOrWhiteSpace(nullString); // true
result = String.IsNullOrWhiteSpace(emptyString); // true
result = String.IsNullOrWhiteSpace(whitespaceString); // true
result = String.IsNullOrWhiteSpace(nonEmptyString); // false
return String.IsNullOrEmpty(value) || value.Trim().Length == 0;, जिसमें नए स्ट्रिंग आवंटन और दो अलग-अलग चेक शामिल हैं। ज्यादातर शायद IsNullOrWhitespace के अंदर यह सिंगल पास के माध्यम से बिना किसी आवंटन के जाँच के द्वारा किया जाता है कि स्ट्रिंग में प्रत्येक चार व्हाट्सएप है, इसलिए बेहतर प्रदर्शन। आप वास्तव में क्या भ्रमित करते हैं?
IsNullOrWhitespace()एक खाली स्ट्रिंग से मेल खाएगा। संक्षेप में IsNullOrEmpty()एक सबसेट से मेल खाता है IsNullOrWhitespace()।
व्यवहार में अंतर:
string testString = "";
Console.WriteLine(string.Format("IsNullOrEmpty : {0}", string.IsNullOrEmpty(testString)));
Console.WriteLine(string.Format("IsNullOrWhiteSpace : {0}", string.IsNullOrWhiteSpace(testString)));
Console.ReadKey();
Result :
IsNullOrEmpty : True
IsNullOrWhiteSpace : True
**************************************************************
string testString = " MDS ";
IsNullOrEmpty : False
IsNullOrWhiteSpace : False
**************************************************************
string testString = " ";
IsNullOrEmpty : False
IsNullOrWhiteSpace : True
**************************************************************
string testString = string.Empty;
IsNullOrEmpty : True
IsNullOrWhiteSpace : True
**************************************************************
string testString = null;
IsNullOrEmpty : True
IsNullOrWhiteSpace : True
वे अलग-अलग कार्य हैं। आपको अपनी स्थिति के लिए तय करना चाहिए कि आपको क्या चाहिए।
मैं उनमें से किसी को भी बुरे अभ्यास के रूप में उपयोग करने पर विचार नहीं करता। अधिकांश समय IsNullOrEmpty()पर्याप्त है। लेकिन आपके पास विकल्प है :)
Contains। यदि आप यह सुनिश्चित करना चाहते हैं कि उपयोगकर्ता नाम केवल रिक्त स्थान से युक्त नहीं हो सकता - IsNullOrWhiteSpaceठीक है। IsNullOrEmptyकेवल यह सुनिश्चित करता है कि उपयोगकर्ता नाम किसी तरह दर्ज किया गया था।
यहाँ दोनों तरीकों का वास्तविक कार्यान्वयन है (dotPeek का उपयोग करके विघटित)
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public static bool IsNullOrEmpty(string value)
{
if (value != null)
return value.Length == 0;
else
return true;
}
/// <summary>
/// Indicates whether a specified string is null, empty, or consists only of white-space characters.
/// </summary>
///
/// <returns>
/// true if the <paramref name="value"/> parameter is null or <see cref="F:System.String.Empty"/>, or if <paramref name="value"/> consists exclusively of white-space characters.
/// </returns>
/// <param name="value">The string to test.</param>
public static bool IsNullOrWhiteSpace(string value)
{
if (value == null)
return true;
for (int index = 0; index < value.Length; ++index)
{
if (!char.IsWhiteSpace(value[index]))
return false;
}
return true;
}
IsNullOrWhiteSpaceलिए भी सच है string.Empty! यह एक बोनस है :)
यह कहता है कि यह सब IsNullOrEmpty()सफेद रिक्ति शामिल नहीं है जबकि IsNullOrWhiteSpace()करता है!
IsNullOrEmpty()यदि स्ट्रिंग है:
-नैल-
खाली
IsNullOrWhiteSpace()यदि स्ट्रिंग है:
-नुल-
खाली-
केवल सफेद रिक्त स्थान का चयन करें
IsNullOrEmpty और IsNullOrwhiteSpace के साथ इसे देखें
string sTestes = "I like sweat peaches";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
for (int i = 0; i < 5000000; i++)
{
for (int z = 0; z < 500; z++)
{
var x = string.IsNullOrEmpty(sTestes);// OR string.IsNullOrWhiteSpace
}
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// Format and display the TimeSpan value.
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds / 10);
Console.WriteLine("RunTime " + elapsedTime);
Console.ReadLine();
आप देखेंगे कि IsNullOrWhiteSpace बहुत धीमी है: /
string.IsNullOrEmpty (str) - यदि आप जांचना चाहेंगे कि स्ट्रिंग मान प्रदान किया गया है
string.IsNullOrWhiteSpace (str) - मूल रूप से यह पहले से ही एक प्रकार का व्यावसायिक तर्क कार्यान्वयन है (अर्थात "" बुरा क्यों है, लेकिन "~~" जैसा कुछ अच्छा है)।
मेरी सलाह - तकनीकी तर्क के साथ व्यावसायिक तर्क को न मिलाएं। इसलिए, उदाहरण के लिए, string.IsNullOrEmpty उनके इनपुट मापदंडों की जांच करने के तरीकों की शुरुआत में उपयोग करने के लिए सबसे अच्छा है।
इस सब के लिए एक पकड़ के बारे में क्या ...
if (string.IsNullOrEmpty(x.Trim())
{
}
यह सभी रिक्त स्थान को ट्रिम कर देगा यदि वे वहां हो तो इस्वाइटस्पेस के प्रदर्शन दंड से बच रहे हैं, जो स्ट्रिंग को "रिक्त" स्थिति को पूरा करने में सक्षम करेगा अगर यह शून्य नहीं है।
मुझे भी लगता है कि यह स्पष्ट है और इसके आम तौर पर अच्छे अभ्यास के लिए स्ट्रिंग्स को ट्रिम करना है, खासकर यदि आप उन्हें डेटाबेस या किसी चीज़ में डाल रहे हैं।
.Net मानक 2.0 में:
string.IsNullOrEmpty(): इंगित करता है कि निर्दिष्ट स्ट्रिंग अशक्त है या खाली स्ट्रिंग है।
Console.WriteLine(string.IsNullOrEmpty(null)); // True
Console.WriteLine(string.IsNullOrEmpty("")); // True
Console.WriteLine(string.IsNullOrEmpty(" ")); // False
Console.WriteLine(string.IsNullOrEmpty(" ")); // False
string.IsNullOrWhiteSpace(): इंगित करता है कि क्या एक निर्दिष्ट स्ट्रिंग अशक्त, खाली है, या केवल सफेद-अंतरिक्ष वर्ण हैं।
Console.WriteLine(string.IsNullOrWhiteSpace(null)); // True
Console.WriteLine(string.IsNullOrWhiteSpace("")); // True
Console.WriteLine(string.IsNullOrWhiteSpace(" ")); // True
Console.WriteLine(string.IsNullOrWhiteSpace(" ")); // True