-2

これが尋ねられる前かどうかはわかりませんが、以下のコードブロックで混乱しています。

コード 1

if (String.IsNullOrEmpty(control.Text.Trim()))
{
      // Code to execute
}

コード 2

if (control.Text.Trim() == "")
{
      // Code to execute
}

コード 3

if (control.Text.Trim() == null)
{
      // Code to execute
}

コード 4

if (control.Text.Trim() == string.Empty)
{
      // Code to execute
}

私によると、すべてが私に働いています。

この4つのコードブロックの違いは何なのか、不思議に思っています。

4

3 に答える 3

2

プリミティブから始めましょう:

control.Text.Trim()最初のブロックは、文字列がnullor かどうかをチェックしますString.Empty

2 番目のブロックは、文字列control.Text.Trim()"".

control.Text.Trim()3 番目のブロックは、文字列が であるかどうかをチェックしますnull

control.Text.Trim()4 番目のブロックは、文字列がString.Empty;かどうかをチェックします。これは 2 番目のブロックとまったく同じです: ""equals String.Empty

なるほど、わかりやすいです。ただし、String.Trim()決して返さないことに注意してくださいnull。したがって、最初のブロックは と同等control.Text.Trim() == String.Emptyです。これも 2 番目のブロックと 4 番目のブロックと""同じですString.Empty。3 番目のブロックがヒットすることはありません。

したがって、1 番目、2 番目、4 番目のブロックはcontrol.Trim、空の文字列と 3 番目のブロックが役に立たず満たすことができないかどうかをチェックすることと同じです。controlisnullまたはcontrol.Textisのnull場合、例外が発生することに注意してください。したがって、`String.IsNullOrWhiteSpaceを使用して、すべてを次のものに置き換えることを強く検討する必要があります。

if(control != null && String.IsNullOrWhiteSpace(control.Text)) {
    // code to execute
}

control(ただし、 ではない何らかの保証がある場合を除きますnull。その場合、 の最初の部分は省略してifください)。

于 2013-08-08T16:30:09.580 に答える
0

より適切なのは次のとおりです。

 if (String.IsNullOrWhiteSpace(control.Text))
 {
   // Code to execute
 }

そうすれば、null 参照例外を回避できます。

すべての例に同じバグがあります。変数が null の場合、例外がスローされます。

string.empty ("") と null の違いもわかるはずです。これらは同じものではありません。コード 4 とコード 2 は同じですが、Text が null の場合はどちらもスローされます。

于 2013-08-08T16:33:53.177 に答える