質問

宣言するとき

string x = new string(new char[0]);

それは問題なく動作します。私の質問はxにどの値が割り当てられるのですか?

チェックするとき

Console.WriteLine(x.CompareTo(null)==0);,it returns false.
役に立ちましたか?

解決

新しいchar [0]を割り当てるとき、文字列はnullではありません。空です。

できること:

Console.WriteLine(string.IsNullOrEmpty(x));

他のヒント

x は、 x ="" と同じ空の文字列になります。

null "" は、2つの異なる文字列値です。特に、 null はnull参照であるため、そのインスタンスメンバーを呼び出すことはできません。したがって、 x がnullの場合、 x.Length NullReferenceException をスローします。

対照的に、"" (または String.Empty )は、たまたま0文字が含まれている通常の文字列です。インスタンスメンバーは正常に機能し、"" .Length は0に等しくなります。

文字列が null であるか空であるかを確認するには、(驚き) String.IsNullOrEmpty

ここで興味深いケースを選択しました。.実行するたびに

string x = new string(new char[0]);

same 文字列への参照を取得します。

(編集:これについて明確にするために-これはnull以外の参照です。他の形式のコンストラクタを使用した場合、または文字列リテラルを使用した場合と同様に文字列を参照します。)

""とは異なる文字列を参照するのに使用しているはずですが、現在は同じ文字列に見えます:

using System;

public class Test
{
    static void Main()
    {
        object x = new string(new char[0]);
        object y = new string(new char[0]);
        object z = "";
        Console.WriteLine(x == y); // True
        Console.WriteLine(x == z); // True
    }
}

私が知る限り、これはクラスの new を呼び出すと既存のオブジェクトへの参照を返すことができる only ケースです。

文字列はnullではなく、空です。

Console.WriteLine(x.CompareTo(String.Empty)==0);

代わりにこれを試してください:

Console.WriteLine(x.CompareTo(string.Empty) == 0);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top