質問
宣言するとき
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);