一串使用Trim()IsNullOrEmpty

本文关键字:Trim IsNullOrEmpty 一串 | 更新日期: 2023-09-27 18:27:43

我想删除第一行:

                 !string.IsNullOrEmpty(cell.Text) 

这会引起什么问题吗?

我在一些代码中遇到了这个:

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

我认为是第一根绳子。IsNullOrEmpty将在带有空格的字符串上返回false
而带有Trim()的行处理了这一点,所以第一个IsNullOrEmpty是无用的

但在我去掉没有修剪的线条之前,我想我应该按小组来做。

一串使用Trim()IsNullOrEmpty

if cell。文本为null,如果没有第一次检查,则会出现异常。

在.NET 4.0中:

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

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

或者你也可以这样做:

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

或者更好的是,您可以为字符串类型编写一个扩展方法,这样您就可以简单地:

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());
    }
}

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

然而,有一个更好的方法:

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

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

/// <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;
}

我认为测试首先是为了确保cell.text不为空。。。如果是这样的话,试图绕过它,只得到cell.text.trim()会阻塞,因为你不能对空字符串进行修剪。

为什么不使用!string.IsNullOrWhitespace(call.Text)并删除前两个检查?

不能仅删除第一个IsNullOrEmpty作为单元格。文本可能为null,因此对其调用Trim将引发异常。如果您正在使用.Net 4.0,请使用IsNullOrWhiteSpace,或者同时保留这两个复选框。

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

如果单元格。Text为null,表达式字符串。IsNullOrEmpty(cell.Text.Trim())将引发异常,因为它正试图在单元格上运行方法Trim()。

若条件是:细胞,那个么就更容易阅读了。文本=空&amp;单间牢房Text.Trim()="

我们可以使用null条件:

!string.IsNullOrEmpty(cell?.Text?.Trim())

注意"在阅读下一个属性和修剪之前。