1. ホーム
  2. c#

[解決済み] キャスティング (NewType) vs. NewTypeとしてのオブジェクト [重複].

2023-04-01 19:38:29

質問

実際、この2つのキャストの違いは何なのでしょうか?

SomeClass sc = (SomeClass)SomeObject;
SomeClass sc2 = SomeObject as SomeClass;

通常、どちらも指定された型への明示的なキャストであるべきではないでしょうか?

どのように解決するのですか?

前者はソース型をターゲット型にキャストできない場合、例外が発生します。後者はsc2がNULL参照になりますが、例外は発生しません。

[編集]

私の当初の回答は、確かに最も顕著な違いですが、Eric Lippert氏のように が指摘しているように が指摘するように、これだけではありません。他の違いは以下の通りです。

  • 値として 'null' を受け入れない型にキャストするために 'as' 演算子を使用することはできない
  • as' を使って 変換 には使えません。例えば、数値を別の表現に変換する場合です(float から int など)。

そして最後に、'as' 対キャスト演算子を使用すると、 "これが成功するかどうかわからない。