1. ホーム
  2. c#

[解決済み] C#の "as "キャストとクラシックキャストの比較 [重複]

2022-04-26 09:23:23

質問

<ブロッククオート

重複の可能性があります。

CLRにおけるキャストと'as'キーワードの使用について

最近、別のキャスティングの方法を知りました。それは

SomeClass someObject = (SomeClass) obj;

はこの構文が使えます。

SomeClass someObject = obj as SomeClass;

これは、obj が SomeClass でない場合、クラスキャスト例外をスローするのではなく、null を返すようです。

キャストに失敗して変数 someObject にアクセスしようとすると、NullReferenceException が発生することがありますね。そこで疑問なのですが、この方法の根拠は何でしょうか?この方法は、キャストの失敗という問題をコードの奥深くに移動させるだけのように思えます。

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

classic"メソッドでは、キャストに失敗すると InvalidCastException が投げられます。このとき as メソッドを呼び出すと、結果的に null をチェックすることができ、例外の発生を回避することができます。

また as 参照型にタイプキャストする場合でも、"classic" メソッドを使用する必要があります。

注意してください。

as メソッドを使用できるのは、その型に null の値を指定します。以前は参照型だけを意味していましたが、.NET 2.0が登場したときに、nullable値型の概念が導入されました。これらの型には null の値で使用すると有効です。 as 演算子を使用します。