C#中的这些命令有什么区别
string text= " ";
1-string.IsNullOrEmpty(text.Trim())
2-string.IsNullOrWhiteSpace(text)
C#中的这些命令有什么区别
string text= " ";
1-string.IsNullOrEmpty(text.Trim())
2-string.IsNullOrWhiteSpace(text)
IsNullOrWhiteSpace
是一种类似于以下代码的便捷方法,不同之处在于它提供了卓越的性能:return String.IsNullOrEmpty(value) || value.Trim().Length == 0;
空白字符由 Unicode 标准定义。该
IsNullOrWhiteSpace
方法将任何返回值为 true 的Char.IsWhiteSpace
字符作为空白字符传递给该方法时进行解释。
简短的回答:
常用的空格" "
、制表符"\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)
。LINE SEPARATOR character (U+2028)
.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
第一种方法检查字符串是否为 null 或空白字符串。在您的示例中,您可能会冒空引用的风险,因为您在修剪之前没有检查空值
1- string.IsNullOrEmpty(text.Trim())
第二种方法检查字符串是否为空或字符串中的任意数量的空格(包括空白字符串)
2- string .IsNullOrWhiteSpace(text)
该方法IsNullOrWhiteSpace
涵盖IsNullOrEmpty
,但true
如果字符串仅包含空格字符,它也会返回。
在您的具体示例中,您应该使用 2),因为您在方法 1) 中存在空引用异常的风险,因为您正在对可能为空的字符串调用 trim
String.IsNullOrEmpty(string value)
true
如果字符串为空或为空,则返回。作为参考,空字符串由“”(两个双引号字符)表示
String.IsNullOrWhitespace(string value)
true
如果字符串为 null、空或仅包含空格字符(如空格或制表符),则返回。
要查看哪些字符算作空白,请参阅此链接:http: //msdn.microsoft.com/en-us/library/t809ektx.aspx
这是反编译后的方法实现。
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
如果您的字符串(在您的情况下是变量text
)可能为空,这将产生很大的不同:
1- string.IsNullOrEmpty(text.Trim())
-->异常,因为您调用了空对象的 mthode
2-string.IsNullOrWhiteSpace(text)
这可以正常工作,因为正在内部检查空问题
要使用第一个选项提供相同的行为,您必须先以某种方式检查它是否不为空,然后使用 trim() 方法
if ((text != null) && string.IsNullOrEmpty(text.Trim())) { ... }
[性能测试]以防万一有人想知道,在秒表测试中比较
if(nopass.Trim().Length > 0)
if (!string.IsNullOrWhiteSpace(nopass))
结果如下:
带空值的修剪长度 = 15
非空值的修剪长度 = 52
IsNullOrWhiteSpace 空值 = 11
IsNullOrWhiteSpace 非空值 = 12
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!