0

たとえば、マスタープロパティ文字列がある場合:

public String SharedInfo
{
    get { return (String)Session["SharedInfo"]; }
    set { Session["SharedInfo"] = value; }
}

コンテンツページのラベルについては、次のようにして文字列が空かどうかを確認します。if(Master.SharedInfo == null)

ここで私の質問は、SharedInfoが文字列であるため、if(Master.SharedInfo == "")が機能しないのはなぜですか?

4

3 に答える 3

2

両方を「キャッチ」する便利な方法があります

if (String.IsNullOrEmpty(Master.SharedInfo)) {
    ...
}

null""等しくありません。null文字列がまったくないことを意味します。""長さの文字列です0

string s = null;
int i = s.Length; // <-- Throws null reference exception

だが

string s = "";
int i = s.Length; // OK, i => 0

""String.Emptyは同等です。String.Emptyの代わりに常に使用する必要があると言う人もいます""が、実際には違いはありません。


アップデート

等しい文字列定数はコンパイラによってインターンされます。つまり、コンパイラは等しい定数を1回だけ格納します。(@BobToddのコメントに応じて)簡単なテストを行うことができます。

string s = ""; 
Console.WriteLine(Object.ReferenceEquals(s, "")); // --> true
Console.WriteLine(Object.ReferenceEquals(s, String.Empty)); // --> true

完全を期すために(@JoelEthertonのコメントによる)。.NET Framework 4.0以降、テストできます

if (String.IsNullOrWhitespace(Master.SharedInfo)) {
    ...
}

" "これは、またはのような文字列もキャッチ"\t"します。

于 2012-05-30T13:40:12.820 に答える
1

C#では、空の文字列""はnullではありません。これは実際の文字列であり、長さはゼロです。

string.IsNullOrEmpty(string stringToTest)null文字列と空文字列の両方をチェックするために使用できます。

于 2012-05-30T13:38:58.970 に答える
1

String.Empty("")とnullはかなり異なります

これは、Session["SharedInfo"]に書き込まれた内容に完全に依存します。

何も持っていない場合はnullになり、そうでない場合は値が書き込まれます。これは空の文字列またはnullである可能性があります。

必ず使用するString.IsNullOrEmpty(string @string)

于 2012-05-30T13:39:48.163 に答える