string s = (string)o; // 1
でない場合はInvalidCastExceptionをスローします。それ以外の場合は、がであっても、に割り当てます。ostringosonull
string s = o as string; // 2
ifがaでない場合、またはifがである場合nullに割り当てます。このため、値型で使用することはできません(その場合、演算子は戻ることができません)。それ以外の場合は、に割り当てます。sostringonullnullos
string s = o.ToString(); // 3
の場合、NullReferenceExceptionoが発生しnullます。タイプに関係なく、にo.ToString()戻るものをすべて割り当てます。so
ほとんどの変換には1を使用します。これは単純で簡単です。何かが適切なタイプでない場合、私は通常例外が発生することを期待しているので、私はほとんど2を使用しない傾向があります。私は、エラーコードを使用する不適切に設計されたライブラリでこのreturn-nullタイプの機能の必要性を見ただけです(たとえば、例外を使用する代わりにreturn null = error)。
3はキャストではなく、単なるメソッド呼び出しです。非文字列オブジェクトの文字列表現が必要な場合に使用します。