String.IsNullOrEmpty() 检查字符串是否为空或只包含空格

20

如何让String.IsNullOrEmpty()将只包含空格的字符串也视为空字符串呢?

例如,我想让以下代码返回true,而不是通常的false:

String.IsNullOrEmpty(" ");

有比这种方法更好的途径吗:

 String.IsNullOrEmpty(" ".Trim());

(请注意,原问题询问的是通常会返回什么,因此引起了一些不太友善的评论,现已被替换为一个更合理的问题。)


8
你试过了吗?它会返回false,因为你传递的字符串既不为空,也不是空字符串。 - Paddy
3
为什么不自己编写一个简单的测试程序并尝试一下呢? - Anders Abel
Paddy: 如果我不使用 Trim(),它将返回 false。我自己尝试过了,这就是为什么我向你们询问的原因。从我们开发者的角度来看,我们经常使用 trim,所以它也必须使用 trim 函数,这就是我所想的。 - Asim Sajjad
Sky Sanders:为了什么懒惰,我已经尝试过了,现在向你们请教。看看João Angelo给出的答案,那正是我要找的,但它在下一个版本中。 - Asim Sajjad
2个回答

55

.NET 4.0将引入方法String.IsNullOrWhiteSpace。在此之前,如果你想以与空字符串相同的方式处理空格字符串,那么你需要使用Trim

对于不使用.NET 4.0的代码,可以实现一个帮助方法来检查null或空或空白字符串,例如:

public static bool IsNullOrWhiteSpace(string value)
{
    if (String.IsNullOrEmpty(value))
    {
        return true;
    }

    return String.IsNullOrEmpty(value.Trim());
}

String.IsNullOrEmpty不会执行任何修剪操作,只会检查字符串是否为null引用或空字符串。


嗯,当 .net 4.0 发布后,如果你将其作为 String 的扩展方法来使用,它会有什么行为呢?...或者等等,你不能编写一个针对 String 的扩展方法,只能针对 string 实例,或者我理解错了吗? - cyberzed
@cyberzed,这本身就可以成为一个问题。您对扩展方法仅适用于字符串实例的说法是正确的。由于.NET 4.0上的新方法是String类上的静态方法,因此不会发生冲突。 - João Angelo
呵呵,我在点击“添加评论”按钮时自己想出了答案,所以我决定将其留作其他人的参考 :) - cyberzed

12
String.IsNullOrEmpty(" ")

...返回 False

String foo = null;
String.IsNullOrEmpty( foo.Trim())

...因为foo为空值而抛出异常。

String.IsNullOrEmpty( foo ) || foo.Trim() == String.Empty

...返回 true。

当然,你可以将其实现为扩展函数:

static class StringExtensions
{
    public static bool IsNullOrWhiteSpace(this string value)
    {
        return (String.IsNullOrEmpty(value) || String.IsNullOrEmpty(value.Trim()));
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接