![](/img/trans.png)
[英]string.IsNullOrEmpty(myString.Trim()) vs string.IsNullOrWhiteSpace(myString)
[英]String.IsNullOrEmpty(myString) Vs myString != null
哪三个在这三个中更好?
string myString = "";
String.IsNullOrEmpty(myString);
vs
string myString = "";
if(myString.Length > 0 || myString != null)
vs
string myString = "";
if (m.Length > 0 | m != null)
前者更清楚,但这些之间有任何性能差异吗? 如果字符串从不为空,如果从文本框中取出,可能是空的但不是空的,该怎么办?
好吧,问题中的版本:
if(myString.Length > 0 || myString != null)
肯定会更糟,因为你应该首先测试null
(而不是秒) - 理想情况下在null
短路,这样你就不会尝试调用.Length
。 但通常我只使用string.IsNullOrEmpty
。 如果需要,您可以随时编写扩展方法以使其更简洁(您可以在null
值上调用扩展方法)。
static bool HasValue(this string s) {
return !string.IsNullOrEmpty(s);
}
使用string.IsNullOrEmpty(str)
。 它更清晰,更简洁。 它不会成为您应用的瓶颈。
如果你只需要检查字符串“空”,那么我会对string.Empty
进行检查,因为它更能表达你的意图。
我会使用IsNullOrEmpty。
稍后查看代码时,将更容易解析。
这是另一个 - 有点奇怪 - 的原因。 一些后来的程序员后来必定会来,抓胡子说“我认为myString.trim()。长度!= 0更好”并改变它。
正如其他人所指出的那样:检查null秒是一个潜在的空访问错误等待发生 - 库例程保证是正常的。
正如其他人所说的那样,IsNullOrEmpty()在可维护性方面优于手动检查,并且由于JIT编译器关于内联的运行时决策而不太可能在性能上受到影响(参见Eric Gunnerson的评论 )。
如果其他人想知道实际的.NET实现是什么样的,这里是.NET 4代码:
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public static bool IsNullOrEmpty(string value)
{
if (value != null)
{
return (value.Length == 0);
}
return true;
}
该属性表明该方法也将在NGen(即本机)图像中内联。
String.IsNullOrEmpty
是更好的选择,如果你不安全如何测试字符串引用的不同状态(你显然是,因为你错了......;)。
使用IsNullOrEmpty
方法:
if (String.IsNullOrEmpty(s)) ...
相当于使用零和零长度的短路测试:
if (s == null || s.Length == 0) ...
如果您知道referene不能为null,则可以跳过该检查并只检查长度:
if (s.Length == 0) ...
IsNullOrEmpty
方法也适用于正常情况,但是在出现错误并且引用实际为null的情况下, IsNullOrEmpty
方法将默默地接受它,而您通常希望知道错误。
我相信String.IsNullOrEmpty(String s)实现为:
if(s == null || s.Length == 0)...
在API中。
I believe the String.IsNullOrEmpty(String s) is implemented as: if (s == null || s.Length == 0) ... in the API.
那是错的。 尝试它,你将得到一个例外,因为将尝试两个语句。 如果s为null,则s.Length将抛出一个execption。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.