在 .NET 4.0 及更高版本中检查字符串时是否使用string.IsNullOrEmpty(string)被认为是不好的做法?string.IsNullOrWhiteSpace(string)
string.IsNullOrEmpty(string)
string.IsNullOrWhiteSpace(string)
最佳实践是选择最合适的一个。
.Net Framework 4.0 Beta 2 为字符串提供了一个新的 IsNullOrWhiteSpace() 方法,该方法将 IsNullOrEmpty() 方法推广到除了空字符串之外还包括其他空格。 术语“隐藏空间”包括屏幕上不可见的所有字符。 例如,空格、换行符、制表符和空字符串是空白字符*。
.Net Framework 4.0 Beta 2 为字符串提供了一个新的 IsNullOrWhiteSpace() 方法,该方法将 IsNullOrEmpty() 方法推广到除了空字符串之外还包括其他空格。
术语“隐藏空间”包括屏幕上不可见的所有字符。 例如,空格、换行符、制表符和空字符串是空白字符*。
参考:这里
就性能而言,IsNullOrWhiteSpace 并不理想但很好。方法调用将导致小的性能损失。此外,如果您不使用 Unicode 数据,IsWhiteSpace 方法本身有一些可以删除的间接方法。与往常一样,过早的优化可能是邪恶的,但它也很有趣。
查看源代码 (参考源代码 .NET Framework 4.6.2)
IsNullorEmpty
[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