string. isnullorempty(字符串)vs. string. isnullorwhitespace(字符串
本文关键字:string 字符串 isnullorwhitespace vs isnullorempty | 更新日期: 2023-09-27 18:04:40
在检查字符串时使用string.IsNullOrEmpty(string)
被认为是不良做法,当。net 4.0及以上版本中有string.IsNullOrWhiteSpace(string)
时?
最佳实践是选择最合适的。
。. Net Framework 4.0 Beta 2有一个新的IsNullOrWhiteSpace()方法将IsNullOrEmpty()方法泛化,使其也包括其他的白色元素空字符串之外的空格。
术语"空白"包括所有不可见的字符屏幕上。例如,空格、换行、制表符和空字符串是白色的空格字符* 。
参考:Here
对于性能来说,IsNullOrWhiteSpace不是理想的,但它是好。方法调用将导致较小的性能损失。此外,IsWhiteSpace方法本身有一些间接的方法可以如果不使用Unicode数据,则删除。一如既往,过早优化可能是邪恶的,但它也很有趣。
参考:Here
查看源代码(参考源。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;
}
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
实践中的差异:
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
它们是不同的功能。你应该根据你的情况决定你需要什么。
我不认为使用它们中的任何一个是不好的做法。大多数情况下,IsNullOrEmpty()
就足够了。但是你可以选择:)
下面是这两个方法的实际实现(使用dotPeek进行反编译)
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public static bool IsNullOrEmpty(string value)
{
if (value != null)
return value.Length == 0;
else
return true;
}
/// <summary>
/// Indicates whether a specified string is null, empty, or consists only of white-space characters.
/// </summary>
///
/// <returns>
/// true if the <paramref name="value"/> parameter is null or <see cref="F:System.String.Empty"/>, or if <paramref name="value"/> consists exclusively of white-space characters.
/// </returns>
/// <param name="value">The string to test.</param>
public static bool IsNullOrWhiteSpace(string value)
{
if (value == null)
return true;
for (int index = 0; index < value.Length; ++index)
{
if (!char.IsWhiteSpace(value[index]))
return false;
}
return true;
}
它说它所有IsNullOrEmpty()
不包括白色间距,而IsNullOrWhiteSpace()
有!
IsNullOrEmpty()
If string is:
空
空
IsNullOrWhiteSpace()
If string is:
空
空
-只包含空白
查看IsNullOrEmpty和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();
您将看到IsNullOrWhiteSpace的速度要慢得多:/
小心转义字符:
String.IsNullOrEmpty(""); //True
String.IsNullOrEmpty(null); //True
String.IsNullOrEmpty(" "); //False
String.IsNullOrEmpty("'n"); //False
String.IsNullOrEmpty("'t"); //False
String.IsNullOrEmpty("hello"); //False
:
String.IsNullOrWhiteSpace("");//True
String.IsNullOrWhiteSpace(null);//True
String.IsNullOrWhiteSpace(" ");//True
String.IsNullOrWhiteSpace("'n");//True
String.IsNullOrWhiteSpace("'t");//True
String.IsNullOrWhiteSpace("hello");//False
如果对传递给IsNullOrEmpty()的值应用Trim,则两个方法的结果将是相同的。
就性能而言,IsNullOrWhiteSpace()会更快。
在。net标准2.0中:
string.IsNullOrEmpty()
:指定字符串是空字符串还是空字符串。
Console.WriteLine(string.IsNullOrEmpty(null)); // True
Console.WriteLine(string.IsNullOrEmpty("")); // True
Console.WriteLine(string.IsNullOrEmpty(" ")); // False
Console.WriteLine(string.IsNullOrEmpty(" ")); // False
string.IsNullOrWhiteSpace()
:指定字符串是空、空还是全空白。
Console.WriteLine(string.IsNullOrWhiteSpace(null)); // True
Console.WriteLine(string.IsNullOrWhiteSpace("")); // True
Console.WriteLine(string.IsNullOrWhiteSpace(" ")); // True
Console.WriteLine(string.IsNullOrWhiteSpace(" ")); // True
string. isnullorempty (str) -如果您想检查字符串值是否已提供
string.IsNullOrWhiteSpace(str) -基本上这已经是一种业务逻辑实现(即为什么"是坏的,而像"~~"这样的东西是好的)。
我的建议是——不要把业务逻辑和技术检查混在一起。例如,字符串。IsNullOrEmpty最好用在方法的开头,检查它们的输入参数。
这个怎么样?
if (string.IsNullOrEmpty(x.Trim())
{
}
这将删除所有存在的空格,避免IsWhiteSpace的性能损失,这将使字符串在不为空时满足"empty"条件。
我也认为这是更清晰的,它通常是一个很好的做法修剪字符串,特别是如果你把它们放入数据库或其他东西