8

この3つの中でどれがいいですか?

string myString = ""; 
String.IsNullOrEmpty(myString);

vs

string myString = "";
if(myString.Length > 0 || myString != null)

vs 

string myString = "";
if (m.Length > 0 | m != null)

前者の方がわかりやすいのですが、これらの間に性能差はありますか?テキスト ボックスから取得した場合のように、文字列が空になることはなく、空である可能性があるが null ではない場合はどうなりますか?

4

7 に答える 7

18

さて、問題のバージョン:

if(myString.Length > 0 || myString != null)

最初に(2番目ではなく)テストする必要があるため、間違いなく悪化します-理想的には短絡して、. しかし、一般的には. 必要に応じて、拡張メソッドをいつでも記述して冗長にすることができます (値に対して拡張メソッドを呼び出すことができます)。null null.Lengthstring.IsNullOrEmptynull

static bool HasValue(this string s) {
    return !string.IsNullOrEmpty(s);
}
于 2010-01-23T23:28:54.353 に答える
4

と一緒に行きstring.IsNullOrEmpty(str)ます。より明確で簡潔です。アプリケーションのボトルネックにはなりません。

文字列の「空」のみをチェックする必要がある場合string.Emptyは、意図をよりよく表現するため、チェックを行います。

于 2010-01-23T23:27:27.847 に答える
2

IsNullOrEmptyを使用します。

後でコードを調べるときに、解析が簡単になります。

もう1つの-少し奇妙な-理由があります。後のプログラマーの中には、後でやって来て、あごひげをひっかいて「myString.trim()。Length!= 0の方がいいと思います」と言って、変更する必要があります。

他の人が指摘しているように、ヌル秒のチェックは、発生するのを待っている潜在的なヌルアクセスエラーです-ライブラリルーチンは正常であることが保証されています。

于 2010-01-23T23:50:43.073 に答える
2

他の人が言っているように、IsNullOrEmpty() は保守性のために手動チェックよりも優れており、インライン化に関する JIT コンパイラのランタイム決定のおかげでパフォーマンスが低下する可能性は低いです ( Eric Gunnerson のコメントを参照)。

実際の .NET 実装がどのようなものか知りたい方のために、.NET 4 コードを次に示します。

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public static bool IsNullOrEmpty(string value)
{
    if (value != null)
    {
        return (value.Length == 0);
    }
    return true;
}

この属性は、メソッドが NGen (つまり、ネイティブ) イメージでもインライン化されることを示します。

于 2010-01-24T07:39:49.463 に答える
1

文字列参照のString.IsNullOrEmptyさまざまな状態をテストする方法について不安がある場合は、これを選択することをお勧めします (間違っているので、明らかにそうです... ;)。

メソッドの使用IsNullOrEmpty:

if (String.IsNullOrEmpty(s)) ...

null および長さ 0 の短絡テストを使用するのと同じです。

if (s == null || s.Length == 0) ...

レフェレンを null にできないことがわかっている場合は、そのチェックをスキップして長さだけをチェックできます。

if (s.Length == 0) ...

このIsNullOrEmptyメソッドは通常の状況でも機能しますが、何か問題が発生して参照が実際に null である場合、IsNullOrEmptyメソッドは黙ってそれを受け入れますが、通常はエラーを認識させたいと考えています。

于 2010-01-24T00:19:30.430 に答える
0

String.IsNullOrEmpty(String s) は次のように実装されていると思います。

if (s == null || s.Length == 0) ...

APIで。

于 2010-01-24T00:36:07.770 に答える
-3

I believe the String.IsNullOrEmpty(String s) is implemented as: if (s == null || s.Length == 0) ... in the API.

それは間違っている。試してみると、2 つのステートメントが試行されるため、例外が発生します。s が null の場合、s.Length は execption をスローします。

于 2012-03-22T14:26:36.717 に答える