【问题标题】:Easier way of writing null or empty?写空或空的更简单的方法?
【发布时间】:2011-11-29 09:28:40
【问题描述】:

我确定我在这里遗漏了一些东西。对于某个项目,我需要检查一个字符串是空的还是空的。

有没有更简单的写法?

if(myString == "" || myString == null)
{
   ...

【问题讨论】:

  • 我确实搜索过。有时非常明显的东西会被忽视。
  • 问题不值得-ve标记,添加链接String.IsNullOrEmpty

标签: c# .net string null


【解决方案1】:

是的,已经有 String.IsNullOrEmpty 辅助方法可以解决这个问题:

if (String.IsNullOrEmpty(myString)) {
    ...
}

【讨论】:

  • 为了超级清楚,您需要使用string/String的类函数,NOT尝试通过对象使用功能!例如,String foo; 将不允许您执行 foo.IsNullOrEmpty();;你需要像String.IsNullOrEmpty(foo); 一样使用它,当来自其他语言时,这有点烦人,因为它们内置了 null/0-length-checks 的字符串对象,因为你不能安全地做类似if(foo.Length == 0) 这样的事情,因为那可以触发异常。
  • @kayleeFrye_onDeck:您应该可以使用if (foo?.Length ?? 0 == 0),但一般来说,调用实例方法需要非null 引用。您可以使用不检查其参数的扩展方法来伪造这一点,但我认为这是不受欢迎的,因为扩展方法应该像实例方法一样表现。
  • 这是一些奇怪的语法 o_o 我不是 C# 开发人员,只是偶尔使用它来开发模块的人,但我不能说我见过以前有过类似的事情......我知道它在做什么,只是希望我能早点知道它!
【解决方案2】:

如果您使用的是 .NET 4,则可以使用

if(string.IsNullOrWhiteSpace(myString)){

}

其他:

if(string.IsNullOrEmpty(myString)){

}

【讨论】:

  • IsNullOrWhiteSpace 检查不等于 "" 的其他内容,因此它的语义与问题中的代码 sn-p 不同。
【解决方案3】:
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
【解决方案4】:

// 如果字符串没有被定义为 null 那么 IsNullOrEmpty 效果很好,但是如果字符串被定义为 null 那么 trim 会抛出异常。

if(string.IsNullOrEmpty(myString.Trim()){
 ...
}

//您可以使用 IsNullOrWhiteSpace,它适用于字符串中的多个空格。即它也对多个空格返回 true

 if(string.IsNullOrWhiteSpace (myString.Trim()){
     ...
    }

【讨论】:

  • "Trim" 不是一个独立的函数,它是 String 的一个实例方法。正确使用:myString.Trim(),但是当 mystring 为空时,它会爆炸。使用String.IsNullOrWhiteSpace()
  • 我同意你的观点,所以我在上面的代码中进行了更正。谢谢@HansKesting
【解决方案5】:

为了避免空检查,您可以使用 ??运算符。

var result = value ?? "";

我经常使用它作为守卫,以避免在方法中发送我不需要的数据。

JoinStrings(value1 ?? "", value2 ?? "")

它也可以用来避免不需要的格式。

string ToString()
{
    return "[" + (value1 ?? 0.0) + ", " + (value2 ?? 0.0) + "]";
}

这也可以用在 if 语句中,虽然不是很好,但有时会很方便。

if (value ?? "" != "") // Not the best example.
{
}

【讨论】:

  • ?? 可用于避免null 检查,但不能用于"""" ?? anything" 仍然让给 ""
【解决方案6】:

在 c# 9 中,通过使用模式匹配,您可以执行以下操作

myString is not {Length: > 0}; // Equivalent to string.IsNullOrEmpty(myString)

【讨论】:

  • 诚实吗?我不喜欢它.. “myString 不是长度属性大于零的对象” - 这是一个负面的测试(就像成功的测试是 if(!operationFailed) - 负面的 / if(operationSucceeded) - 正面的味道)。您必须停下来思考它的实际含义/作者的意图,以降低代码的可读性/一目了然/自文档化。 IsNullOrEmpty 很好地解释了它的作用。
  • 它的可读性可能不是很好,但它现在是该语言的一个特性
【解决方案7】:

C# 9 的模式匹配允许您编写:

myString is null or ""

【讨论】:

    猜你喜欢
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 2018-03-03
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多