これは便利!C#で is 演算子を使って型判定とキャストを1行で書く

2024年9月27日金曜日

C#

t f B! P L

C# 7.0 から導入された機能の一つに、is 演算子を使用して型の判定と同時に変数へのキャストができる便利な構文があります。C#には便利な構文がいろいろありますが、これもコードをよりシンプルにしてくれるでしょう。

従来の方法と新しい is 演算子の比較

まず、従来の方法を見てみましょう。

object obj = "Hello, world!";
if (obj is string)
{
    string s = (string)obj;
    Console.WriteLine(s);
}

このコードでは、まず objstring 型であるかを is 演算子で判定し、その後にキャストを行っています。これでも問題なく機能しますが、型判定とキャストを二回書かないといけないため、キャストする値が多くなってくると少々冗長になってきます。

is パターンマッチングを使った方法

C# 7.0 以降では、型の判定とキャストが1行で記述可能です。
以下が新しい方法です。

object obj = "Hello, world!";
if (obj is string s)
{
    Console.WriteLine(s);
}

このように、is string s という構文を使うことで、objstring 型である場合には、その型の変数 s にキャストされた値が代入されます。もし objstring 型でなければ、if 文の内部には入らず、キャストは行われません。

便利な使用例

型判定とキャストを同時に行う構文の、便利な使用例を少し見ていきましょう。

例 1: 数値型かどうかの判定

object value = 123;

if (value is int number)
{
    Console.WriteLine($"これは整数: {number}");
}
else if (value is double decimalNumber)
{
    Console.WriteLine($"これは小数: {decimalNumber}");
}
else
{
    Console.WriteLine("これは数値ではありません");
}

この例では、valueintdouble のいずれかであるかを判定し、それぞれの型にキャストされた変数 number または decimalNumber に代入してます。

例 2: カスタムオブジェクトの判定

class Animal { }
class Dog : Animal { }

object animal = new Dog();

if (animal is Dog dog)
{
    Console.WriteLine("これは犬です");
}
else
{
    Console.WriteLine("これは犬ではありません");
}

この例では、animalDog 型であるかどうかを判定し、Dog 型であればキャストされて dog 変数に代入されます。

まとめ

C# 7.0 以降で導入された is 演算子のパターンマッチング機能は、型判定とキャストを同時に行えるため、より簡潔で効率的なコードを記述するのに役立つでしょう。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ