7

最初の行を削除したい:

                 !string.IsNullOrEmpty(cell.Text) 

これは何か問題を引き起こしますか?

私はいくつかのコードでこれに出くわしました:

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

最初の string.IsNullOrEmpty はスペース
を含む文字列に対して false を返し、Trim() を含む行がそれを処理するため、最初の IsNullOrEmpty は役に立たないと思います

しかし、トリムなしでラインを削除する前に、グループごとに実行すると思っていました.

4

9 に答える 9

12

cell.Textがnullの場合、最初のチェックなしで例外が発生します。

于 2012-03-14T17:52:43.603 に答える
8

.NET 4.0の場合:

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

古いバージョンでは、最初のテストを削除してnullの場合、nullインスタンスでcell.Text呼び出そうとすると、2番目のテストでNREが取得されるため、2つのテストを保持する必要があります。.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());
    }
}
于 2012-03-14T17:53:17.723 に答える
7

最初の IsNullOrEmpty は、Trim() で NullReferenceException をスローする前に null 値をキャッチします。

ただし、より良い方法があります。

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text))
于 2012-03-14T17:54:41.943 に答える
0

テストは、最初にcell.textがnullでないことを確認することだと思います...もしそうなら、それをバイパスしてcell.text.trim()だけを取得しようとすると、null文字列をトリムできないため、チョークします。

于 2012-03-14T17:53:45.233 に答える
0

!string.IsNullOrWhitespace(call.Text)前の2つのチェックを使用して削除してみませんか?

于 2012-03-14T17:54:05.850 に答える
0

cell.Text が null になる可能性があるため、最初の IsNullOrEmpty だけを削除することはできず、Trim を呼び出すと例外がスローされます。.Net 4.0 を使用している場合はIsNullOrWhiteSpaceを使用するか、両方のチェックを残します。

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text))
于 2012-03-14T17:54:16.643 に答える
0

cell.Text が null の場合、式 string.IsNullOrEmpty(cell.Text.Trim()) は、セルでメソッド Trim() を実行しようとしているため、例外をスローします。

条件が次の場合、はるかに読みやすくなります: cell.Text!=null && cell.Text.Trim()!=""

于 2012-03-14T17:54:33.003 に答える