string.IsNullOrEmpty(string) vs. string.IsNullOrWhiteSpace(string)

后端 未结 9 713
广开言路
广开言路 2020-11-28 03:02

Is use of string.IsNullOrEmpty(string) when checking a string considered as bad practice when there is string.IsNullOrWhiteSpace(string) in .NET 4.

相关标签:
9条回答
  • 2020-11-28 03:12

    The best practice is selecting the most appropriate one.

    .Net Framework 4.0 Beta 2 has a new IsNullOrWhiteSpace() method for strings which generalizes the IsNullOrEmpty() method to also include other white space besides empty string.

    The term “white space” includes all characters that are not visible on screen. For example, space, line break, tab and empty string are white space characters*.

    Reference : Here

    For performance, IsNullOrWhiteSpace is not ideal but is good. The method calls will result in a small performance penalty. Further, the IsWhiteSpace method itself has some indirections that can be removed if you are not using Unicode data. As always, premature optimization may be evil, but it is also fun.

    Reference : Here

    Check the source code (Reference Source .NET Framework 4.6.2)

    IsNullorEmpty

    [Pure]
    public static bool IsNullOrEmpty(String value) {
        return (value == null || value.Length == 0);
    }
    

    IsNullOrWhiteSpace

    [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;
    }
    

    Examples

    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
    
    0 讨论(0)
  • 2020-11-28 03:17

    Check this out with IsNullOrEmpty and 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();
    

    You'll see that IsNullOrWhiteSpace is much slower :/

    0 讨论(0)
  • 2020-11-28 03:19

    What about this for a catch all...

    if (string.IsNullOrEmpty(x.Trim())
    {
    }
    

    This will trim all the spaces if they are there avoiding the performance penalty of IsWhiteSpace, which will enable the string to meet the "empty" condition if its not null.

    I also think this is clearer and its generally good practise to trim strings anyway especially if you are putting them into a database or something.

    0 讨论(0)
  • 2020-11-28 03:22

    The differences in practice :

    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
    
    0 讨论(0)
  • 2020-11-28 03:24

    They are different functions. You should decide for your situation what do you need.

    I don't consider using any of them as a bad practice. Most of the time IsNullOrEmpty() is enough. But you have the choice :)

    0 讨论(0)
  • 2020-11-28 03:24

    In the .Net standard 2.0:

    string.IsNullOrEmpty(): Indicates whether the specified string is null or an Empty string.

    Console.WriteLine(string.IsNullOrEmpty(null));           // True
    Console.WriteLine(string.IsNullOrEmpty(""));             // True
    Console.WriteLine(string.IsNullOrEmpty(" "));            // False
    Console.WriteLine(string.IsNullOrEmpty("  "));           // False
    

    string.IsNullOrWhiteSpace(): Indicates whether a specified string is null, empty, or consists only of white-space characters.

    Console.WriteLine(string.IsNullOrWhiteSpace(null));     // True
    Console.WriteLine(string.IsNullOrWhiteSpace(""));       // True
    Console.WriteLine(string.IsNullOrWhiteSpace(" "));      // True
    Console.WriteLine(string.IsNullOrWhiteSpace("  "));     // True
    
    0 讨论(0)
提交回复
热议问题