170

C#中的这些命令有什么区别

string text= "  ";
1-string.IsNullOrEmpty(text.Trim())

2-string.IsNullOrWhiteSpace(text)
4

8 回答 8

229

IsNullOrWhiteSpace是一种类似于以下代码的便捷方法,不同之处在于它提供了卓越的性能:

return String.IsNullOrEmpty(value) || value.Trim().Length == 0;

空白字符由 Unicode 标准定义。该 IsNullOrWhiteSpace方法将任何返回值为 true 的Char.IsWhiteSpace字符作为空白字符传递给该方法时进行解释。

于 2013-09-10T04:21:01.850 回答
94

简短的回答:

常用的空格" "、制表符"\t"和换行符"\n"是有区别的:

string.IsNullOrWhiteSpace("\t"); //true
string.IsNullOrEmpty("\t"); //false

string.IsNullOrWhiteSpace(" "); //true
string.IsNullOrEmpty(" "); //false

string.IsNullOrWhiteSpace("\n"); //true
string.IsNullOrEmpty("\n"); //false

https://dotnetfiddle.net/4hkpKM

另请参阅有关以下内容的答案:空白字符


长答案:

还有一些其他的空白字符,您可能以前从未使用过

  • UnicodeCategory.SpaceSeparator 类别的成员,其中包括字符SPACE (U+0020), NO-BREAK SPACE (U+00A0), OGHAM SPACE MARK (U+1680), EN QUAD (U+2000), EM QUAD (U+2001), EN SPACE (U+2002), EM SPACE (U+2003), THREE-PER-EM SPACE (U+2004), FOUR-PER-EM SPACE (U+2005), SIX-PER-EM SPACE (U+2006), FIGURE SPACE (U+2007), PUNCTUATION SPACE (U+2008), THIN SPACE (U+2009), HAIR SPACE (U+200A), NARROW NO-BREAK SPACE (U+202F), MEDIUM MATHEMATICAL SPACE (U+205F), and IDEOGRAPHIC SPACE (U+3000)
  • UnicodeCategory.LineSeparator 类别的成员,该类别仅由LINE SEPARATOR character (U+2028).
  • UnicodeCategory.ParagraphSeparator 类别的成员,该类别仅由PARAGRAPH SEPARATOR character (U+2029).
  • 字符CHARACTER TABULATION (U+0009), LINE FEED (U+000A), LINE TABULATION (U+000B), FORM FEED (U+000C), CARRIAGE RETURN (U+000D), and NEXT LINE (U+0085)

https://docs.microsoft.com/en-us/dotnet/api/system.char.iswhitespace

于 2014-07-01T14:56:22.410 回答
54

第一种方法检查字符串是否为 null 或空白字符串。在您的示例中,您可能会冒空引用的风险,因为您在修剪之前没有检查空值

1- string.IsNullOrEmpty(text.Trim())

第二种方法检查字符串是否为空或字符串中的任意数量的空格(包括空白字符串)

2- string .IsNullOrWhiteSpace(text)

该方法IsNullOrWhiteSpace涵盖IsNullOrEmpty,但true如果字符串仅包含空格字符,它也会返回。

在您的具体示例中,您应该使用 2),因为您在方法 1) 中存在空引用异常的风险,因为您正在对可能为空的字符串调用 trim

于 2013-09-10T04:21:00.107 回答
11

String.IsNullOrEmpty(string value)true如果字符串为空或为空,则返回。作为参考,空字符串由“”(两个双引号字符)表示

String.IsNullOrWhitespace(string value)true如果字符串为 null、空或仅包含空格字符(如空格或制表符),则返回。

要查看哪些字符算作空白,请参阅此链接:http: //msdn.microsoft.com/en-us/library/t809ektx.aspx

于 2013-09-10T04:24:51.587 回答
11

这是反编译后的方法实现。

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

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

所以很明显IsNullOrWhiteSpace方法也会检查传递的值是否包含空格。

空格参考:https ://msdn.microsoft.com/en-us/library/system.char.iswhitespace(v=vs.110).aspx

于 2016-10-24T10:09:43.910 回答
4

如果您的字符串(在您的情况下是变量text)可能为空,这将产生很大的不同:

1- string.IsNullOrEmpty(text.Trim()) -->异常,因为您调用了空对象的 mthode

2-string.IsNullOrWhiteSpace(text) 这可以正常工作,因为正在内部检查空问题

要使用第一个选项提供相同的行为,您必须先以某种方式检查它是否不为空,然后使用 trim() 方法

if ((text != null) && string.IsNullOrEmpty(text.Trim())) { ... }
于 2016-10-24T09:49:00.823 回答
2

[性能测试]以防万一有人想知道,在秒表测试中比较

if(nopass.Trim().Length > 0)

if (!string.IsNullOrWhiteSpace(nopass))



结果如下:

带空值的修剪长度 = 15

非空值的修剪长度 = 52


IsNullOrWhiteSpace 空值 = 11

IsNullOrWhiteSpace 非空值 = 12

于 2018-01-19T00:47:51.643 回答
2

String.IsNullOrWhiteSpace(text)应该在大多数情况下使用,因为它还包括一个带有空格但没有其他文本的空白字符串

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //Your code goes here
            var str = "";
            
            Console.WriteLine(string.IsNullOrWhiteSpace(str));              
            
        }
    }
}

它返回True

于 2017-05-23T08:16:37.120 回答