【发布时间】:2011-11-29 09:28:40
【问题描述】:
我确定我在这里遗漏了一些东西。对于某个项目,我需要检查一个字符串是空的还是空的。
有没有更简单的写法?
if(myString == "" || myString == null)
{
...
【问题讨论】:
-
我确实搜索过。有时非常明显的东西会被忽视。
-
问题不值得-ve标记,添加链接String.IsNullOrEmpty
我确定我在这里遗漏了一些东西。对于某个项目,我需要检查一个字符串是空的还是空的。
有没有更简单的写法?
if(myString == "" || myString == null)
{
...
【问题讨论】:
是的,已经有 String.IsNullOrEmpty 辅助方法可以解决这个问题:
if (String.IsNullOrEmpty(myString)) {
...
}
【讨论】:
string/String的类函数,NOT尝试通过对象使用功能!例如,String foo; 将不允许您执行 foo.IsNullOrEmpty();;你需要像String.IsNullOrEmpty(foo); 一样使用它,当来自其他语言时,这有点烦人,因为它们内置了 null/0-length-checks 的字符串对象,因为你不能安全地做类似if(foo.Length == 0) 这样的事情,因为那可以触发异常。
if (foo?.Length ?? 0 == 0),但一般来说,调用实例方法需要非null 引用。您可以使用不检查其参数的扩展方法来伪造这一点,但我认为这是不受欢迎的,因为扩展方法应该像实例方法一样表现。
如果您使用的是 .NET 4,则可以使用
if(string.IsNullOrWhiteSpace(myString)){
}
其他:
if(string.IsNullOrEmpty(myString)){
}
【讨论】:
IsNullOrWhiteSpace 检查不等于 "" 的其他内容,因此它的语义与问题中的代码 sn-p 不同。
if (string.IsNullOrEmpty(myString)) {
...
}
或者您可以利用扩展方法中的一个怪癖,它们允许 this 为空:
static class Extensions {
public static bool IsEmpty(this string s) {
return string.IsNullOrEmpty(s);
}
}
然后让你写:
if (myString.IsEmpty()) {
...
}
虽然您可能应该选择“空”以外的其他名称。
【讨论】:
string.IsNullOrEmpty(s) 而不是s == null || s == string.Empty?
// 如果字符串没有被定义为 null 那么 IsNullOrEmpty 效果很好,但是如果字符串被定义为 null 那么 trim 会抛出异常。
if(string.IsNullOrEmpty(myString.Trim()){
...
}
//您可以使用 IsNullOrWhiteSpace,它适用于字符串中的多个空格。即它也对多个空格返回 true
if(string.IsNullOrWhiteSpace (myString.Trim()){
...
}
【讨论】:
myString.Trim(),但是当 mystring 为空时,它会爆炸。使用String.IsNullOrWhiteSpace()
为了避免空检查,您可以使用 ??运算符。
var result = value ?? "";
我经常使用它作为守卫,以避免在方法中发送我不需要的数据。
JoinStrings(value1 ?? "", value2 ?? "")
它也可以用来避免不需要的格式。
string ToString()
{
return "[" + (value1 ?? 0.0) + ", " + (value2 ?? 0.0) + "]";
}
这也可以用在 if 语句中,虽然不是很好,但有时会很方便。
if (value ?? "" != "") // Not the best example.
{
}
【讨论】:
?? 可用于避免null 检查,但不能用于""。 "" ?? anything" 仍然让给 ""
在 c# 9 中,通过使用模式匹配,您可以执行以下操作
myString is not {Length: > 0}; // Equivalent to string.IsNullOrEmpty(myString)
【讨论】:
if(!operationFailed) - 负面的 / if(operationSucceeded) - 正面的味道)。您必须停下来思考它的实际含义/作者的意图,以降低代码的可读性/一目了然/自文档化。 IsNullOrEmpty 很好地解释了它的作用。
C# 9 的模式匹配允许您编写:
myString is null or ""
【讨论】: