string.IsNullOrEmpty使用Trim()

时间:2012-03-14 17:50:35

标签: c# string trim isnullorempty

我想删除第一行:

                 !string.IsNullOrEmpty(cell.Text) 

这会导致任何问题吗?

我在一些代码中遇到过这个问题:

                if ((id % 2 == 0)
                    && !string.IsNullOrEmpty(cell.Text)
                    && !string.IsNullOrEmpty(cell.Text.Trim())
                    )

我认为第一个string.IsNullOrEmpty会在带有空格的字符串上返回false 并且Trim()的行处理它,所以第一个IsNullOrEmpty是无用的

但是在我删除没有修剪的线之前我以为我会在小组中运行它。

8 个答案:

答案 0 :(得分:12)

如果cell.Text为null,则在没有首次检查的情况下会出现异常。

答案 1 :(得分:8)

在.NET 4.0中:

if (id % 2 == 0 && !string.IsNullOrWhiteSpace(cell.Text))
{
    ...
}

在旧版本中,您应该保留这两个测试,因为如果删除第一个并且cell.Text为null,则当您尝试在空实例上调用.Trim时,将在第二个上获得NRE。

或者您也可以这样做:

if (id % 2 == 0 && string.IsNullOrWhiteSpace((cell.Text ?? string.Empty).Trim()))
{
    ...
}

甚至更好,您可以为字符串类型编写extension method,以便您可以这样做:

if (id % 2 == 0 && !cell.Text.IsNullOrWhiteSpace())
{
    ...
}

可能如下所示:

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

答案 2 :(得分:4)

第一个IsNullOrEmpty在使用Trim()抛出NullReferenceException之前捕获空值。

但是,还有更好的方法:

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text))

答案 3 :(得分:0)

我相信测试是为了确保cell.text首先不是null ...如果是这样,试图绕过它并获得只是cell.text.trim()会因为你无法修剪null string。

答案 4 :(得分:0)

为什么不使用!string.IsNullOrWhitespace(call.Text)并放弃之前的两项检查?

答案 5 :(得分:0)

你不能只删除第一个IsNullOrEmpty作为cell.Text可能为null,因此调用Trim就会抛出异常。如果您使用的是.Net 4.0,请使用IsNullOrWhiteSpace或保留两个检查。

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text))

答案 6 :(得分:0)

如果cell.Text为null,则表达式string.IsNullOrEmpty(cell.Text.Trim())将抛出异常,因为它试图在单元格上运行方法Trim()。

如果条件如下,则更加可读:cell.Text!= null&& cell.Text.Trim()!= “”

答案 7 :(得分:0)

你可以使用这样的扩展方法:

/// <summary>
/// Indicates whether the specified string is null or empty.
/// This methods internally uses string.IsNullOrEmpty by trimming the string first which string.IsNullOrEmpty doesn't.
/// .NET's default string.IsNullOrEmpty method return false if a string is just having one blank space.
/// For such cases this custom IsNullOrEmptyWithTrim method is useful.
/// </summary>
/// <returns><c>true</c> if the string is null or empty or just having blank spaces;<c>false</c> otherwise.</returns> 
public static bool IsNullOrEmptyWithTrim(this string value)
{
    bool isEmpty = string.IsNullOrEmpty(value);
    if (isEmpty)
    {
        return true;
    }
    return value.Trim().Length == 0;
}