string.IsNullOrEmpty используя Trim () - PullRequest
5 голосов
/ 14 марта 2012

Я хочу удалить первую строку:

                 !string.IsNullOrEmpty(cell.Text) 

это вызовет какую-либо проблему?

Я столкнулся с этим в некотором коде:

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

Iдумаю, что первая строка. IsNullOrEmpty вернет false для строки с пробелами
, и строка с Trim () позаботится об этом, поэтому первый IsNullOrEmpty бесполезен

Но перед тем, как удалить строку без обрезкиЯ думал, что буду управлять им группой.

Ответы [ 8 ]

12 голосов
/ 14 марта 2012

если cell.Text имеет значение null, у вас будет исключение без этой первой проверки.

8 голосов
/ 14 марта 2012

В .NET 4.0:

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

В старых версиях вы должны оставить два теста, потому что если вы удалите первый и cell.Text будет нулевым, вы получите NRE на втором при попыткевызвать .Trim на нулевом экземпляре.

Или вы также можете сделать это:

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());
    }
}
5 голосов
/ 14 марта 2012

Первый IsNullOrEmpty ловит нулевые значения, прежде чем они генерируют исключение NullReferenceException с Trim ().

Однако есть лучший способ:

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text))
0 голосов
/ 08 сентября 2016

Вы можете использовать метод расширения следующим образом:

/// <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;
}
0 голосов
/ 14 марта 2012

Если cell.Text имеет значение null, выражение string.IsNullOrEmpty (cell.Text.Trim ()) сгенерирует исключение, так как он пытается запустить метод Trim () для ячейки.

Гораздо более читабельноесли условие будет следующим: cell.Text! = null && cell.Text.Trim ()! = ""

0 голосов
/ 14 марта 2012

Вы не можете удалить только первый IsNullOrEmpty, так как ячейка. Текст может быть нулевым, и, следовательно, вызов Trim для него вызовет исключение.Используйте IsNullOrWhiteSpace , если вы используете .Net 4.0 или оставьте обе проверки.

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text))
0 голосов
/ 14 марта 2012

Почему бы не использовать !string.IsNullOrWhitespace(call.Text) и отбросить предыдущие две проверки?

0 голосов
/ 14 марта 2012

Я считаю, что тест состоит в том, чтобы сначала убедиться, что cell.text не является нулевым ... если это так, попытка обойти его и получить только cell.text.trim () захлебнется, поскольку вы не можете выполнить обрезку напустая строка.

...