C # 中 IsNullOrEmpty 与 IsNullOrWhiteSpace 的区别

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

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


2-string.IsNullOrWhiteSpace(text)
153317 次浏览

第一个方法检查字符串是空字符串还是空字符串。在您的示例中,您可能会冒险使用 null 引用,因为在修整之前不检查 null

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

第二个方法检查字符串是空的还是字符串中任意数量的空格(包括空字符串)

2- string .IsNullOrWhiteSpace(text)

方法 IsNullOrWhiteSpace覆盖 IsNullOrEmpty,但是如果字符串只包含空白字符,它也返回 true

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

IsNullOrWhiteSpace是一种方便的方法,类似于 下面的代码,除了它提供了更好的性能:

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

空白字符由 Unicode 标准定义 方法解释返回 当它作为 空白字符空白字符。

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

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

要查看哪些字符算作空格,请参考以下链接: Http://msdn.microsoft.com/en-us/library/t809ektx.aspx

简短的回答:

在通常情况下,空格 " "、标签 "\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

也可以看到这个答案关于: 空格字符


长话短说:

还有一些其他的空白字符,你可能从来没有使用过

  • 包含字符 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. SpaceMolecular ator 类别的成员。
  • 完全由 LINE SEPARATOR character (U+2028)组成的 UnicodeCategory. LineMolecular ator 类别的成员。
  • 完全由 PARAGRAPH SEPARATOR character (U+2029)组成的 UnicodeCategory。段落分隔符类别的成员。
  • 字符 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://learn.microsoft.com/en-us/dotnet/api/system.char.iswhitespace

如果你的字符串(在你的例子中是变量 text)可以是 null,这将会造成很大的不同:

1-string.IsNullOrEmpty(text.Trim()) - > 例外,因为您调用了一个空对象的方法

2-string.IsNullOrWhiteSpace(text) 由于在内部检查 null 问题,因此这样做可以很好地工作

为了使用第一个选项提供相同的行为,你必须先检查它是否为空,然后使用 trim ()方法

if ((text != null) && string.IsNullOrEmpty(text.Trim())) { ... }

这是反编译后的 方法的实施

    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

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

}
}
}

它返回 没错

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

如果(nopass. Trim () . 长度 > 0)

If (! string.IsNullOrWhiteSpace (nopass))



以下是结果:

值为空的修剪长度 = 15

不为空值的修剪长度 = 52


值为空的 IsNullOrWhiteSpace = 11

不为空值的 IsNullOrWhiteSpace = 12