誰かがこのディスカッションスレッドで、何もないところから文字列を作成することはできないと述べました。
(私が思うに、これは素晴らしいフレーズです)。しかし、はい-次の例に示すように、:-) できます。
var x = null + (string)null;
var wtf = x.ToString();
正常に動作し、例外をまったくスローしません。唯一の違いは、nullの1つを文字列にキャストする必要があることです。(文字列)キャストを削除した場合、例は引き続きコンパイルされますが、実行時例外がスローされます。 「<null>」と「<null>」を入力します。
注意上記のコード例では、xの値は期待どおりにnullではなく、オペランドの1つを文字列にキャストした後は実際には空の文字列です。
もう1つの興味深い事実は、C#/ .NETでは、null
異なるデータ型を考慮すると、処理方法が常に同じになるとは限らないことです。例えば:
int? x = 1; // string x = "1";
x = x + null + null;
Console.WriteLine((x==null) ? "<null>" : x.ToString());
コードスニペットの1行目について:がvalueを含むx
null許容整数変数(つまりint?
)の場合1
、結果が<null>
返されます。それが値を持つ文字列(コメントに示されている)の場合"1"
は、ではなく"1"
戻ります<null>
。
注:また興味深い:var x = 1;
最初の行に使用している場合は、ランタイムエラーが発生します。どうして?これは、代入によって変数x
がdatatypeに変わるためですint
。これはnullにできません。コンパイラはint?
ここを想定していないため、null
が追加されている2行目で失敗します。
null.ToString()
に名前が付けられているのは独特ですwtf
。なぜ驚いたのですか?そもそもそれを呼び出すものがない場合、インスタンスメソッドを呼び出すことはできません。