3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C#】キャスト時に便利なis演算子

Last updated at Posted at 2025-01-13

コーディングしている際にどうしてもキャストを使いたくなるケースってありますよね?

C#においては一般的に3パターンの実装方法があります

1. 通常キャスト

Animal animal = new Animal();

try
{
    Cat cat = (Cat)animal;
    // catを使った処理
}
catch (InvalidCastException)
{
    // 処理失敗時の処理
}

class Animal { }
class Cat : Animal { }

2. as演算子を使用

Animal animal = new Animal();

Cat cat = animal as Cat;
if (cat != null)
{
    // catを使った処理
}

class Animal { }
class Cat : Animal { }

3. is演算子を使用

Animal animal = new Animal();

if (animal is Cat cat)
{
    // catを使った処理
}

class Animal { }
class Cat : Animal { }

ケースバイケースだとは思いますが、キャスト時は便利なis演算子を使うことをオススメします!

理由は以下の通りです

キャスト失敗時の例外リスク回避

通常のキャストの場合、キャストに失敗した際はInvalidCastExceptionが発生します

つまり、適切な箇所でtry-catchの実装が必要ということですね

その実装を失念するとプログラムが予期せず落ちるリスクが高まり、アプリケーションの安定性の低下を招くかも...

is演算子ではキャスト失敗時はif条件式がfalseになるだけなので例外発生の考慮は不要になります

Nullチェックが不要

as演算子を使用した場合、キャストに失敗した際はnullが返却されます

そのままnullチェックを行わずcatを使用しようとするとNullReferenceExceptionの発生を招く可能性があります

つまり、as演算子を使う場合はキャスト後の値のnullチェックが必須になります

is演算子では値がnullの場合はキャスト失敗時同様にif条件式がfalseになるため、ブロック内の処理は実行されません

コードの簡潔さ

is演算子を使えば、上記のキャスト失敗判定、nullチェックに加えてキャスト後の変数宣言も同時に記述できます

ifの条件式内でキャストが成功すれば、変数catに勝手にキャスト後の値を代入してくれます

あとはifブロック内でcatをそのまま使うだけですね!

まとめ

コードの記述量を見て貰えば一目瞭然ですが、is演算子を使うことによってかなり簡潔に実装できます

通常キャストやas演算子利用時より考慮すべき項目が少ないからということですね👍

複雑なエラーハンドリングが不要で、単純に型変換をしたいだけであれば便利な演算子なのでぜひ今後の選択肢の一つに!

参考

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?