[解決済み] 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
演算子を使用します。
関連
-
[解決済み】指定されたキャストが有効でない?
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] JavaでDoubleをIntegerにキャストする
-
[解決済み】コンストラクタがパラメータを必要とするジェネリック型のインスタンスを作成しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み] CLRのキャストと'as'キーワードの使用について