C# 7.0 から導入された機能の一つに、is
演算子を使用して型の判定と同時に変数へのキャストができる便利な構文があります。C#には便利な構文がいろいろありますが、これもコードをよりシンプルにしてくれるでしょう。
従来の方法と新しい is
演算子の比較
まず、従来の方法を見てみましょう。
object obj = "Hello, world!";
if (obj is string)
{
string s = (string)obj;
Console.WriteLine(s);
}
このコードでは、まず obj
が string
型であるかを is
演算子で判定し、その後にキャストを行っています。これでも問題なく機能しますが、型判定とキャストを二回書かないといけないため、キャストする値が多くなってくると少々冗長になってきます。
is
パターンマッチングを使った方法
C# 7.0 以降では、型の判定とキャストが1行で記述可能です。
以下が新しい方法です。
object obj = "Hello, world!";
if (obj is string s)
{
Console.WriteLine(s);
}
このように、is string s
という構文を使うことで、obj
が string
型である場合には、その型の変数 s
にキャストされた値が代入されます。もし obj
が string
型でなければ、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("これは数値ではありません");
}
この例では、value
が int
か double
のいずれかであるかを判定し、それぞれの型にキャストされた変数 number
または decimalNumber
に代入してます。
例 2: カスタムオブジェクトの判定
class Animal { }
class Dog : Animal { }
object animal = new Dog();
if (animal is Dog dog)
{
Console.WriteLine("これは犬です");
}
else
{
Console.WriteLine("これは犬ではありません");
}
この例では、animal
が Dog
型であるかどうかを判定し、Dog
型であればキャストされて dog
変数に代入されます。
まとめ
C# 7.0 以降で導入された is
演算子のパターンマッチング機能は、型判定とキャストを同時に行えるため、より簡潔で効率的なコードを記述するのに役立つでしょう。
0 件のコメント:
コメントを投稿