C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#の「is」演算子とは?目的と使い方を実例付きで解説

C#の「is」演算子とは

C#における「is」演算子は、オブジェクトの実行時の型(ランタイム型)が、指定した型と互換性があるかどうかを判定するために使用されます。判定結果はbool値(true / false)として返されるため、条件分岐と組み合わせて使われることが多い演算子です。

基本構文

is演算子の基本的な構文は以下の通りです。

expr is type
  • expr:判定対象となる式
  • type:比較対象となる型の名前

expr の実行時の型が type と互換性がある場合は true を、互換性がない場合は false を返します。

使用例

以下は、C#でis演算子を使用してオブジェクトの型を判定する例です。

using System;
class One {
}
class Two {
}
public class Demo {
    public static void Test(object obj) {
        One x;
        Two y;
        if (obj is One) {
            Console.WriteLine("Class One");
            x = (One)obj;
        } else if (obj is Two) {
            Console.WriteLine("Class Two");
            y = (Two)obj;
        } else {
            Console.WriteLine("None of the classes!");
        }
    }
    public static void Main() {
        One o1 = new One();
        Two t1 = new Two();
        Test(o1);
        Test(t1);
        Test("str");
        Console.ReadKey();
    }
}

このプログラムでは、Testメソッドに渡されたオブジェクトの型をis演算子で判定しています。

  • Oneクラスのインスタンスを渡した場合 →「Class One」と表示され、キャスト後に変数xへ代入されます。
  • Twoクラスのインスタンスを渡した場合 →「Class Two」と表示され、キャスト後に変数yへ代入されます。
  • どちらでもない文字列"str"を渡した場合 →「None of the classes!」と表示されます。

このように、is演算子を使えば安全に型を確認してからキャストを行えるため、無効なキャストによる例外(InvalidCastException)の発生を防ぐことができます。

補足:パターンマッチングとの組み合わせ(C# 7.0以降)

C# 7.0以降では、is演算子は型パターンマッチングと組み合わせて利用できます。これにより、型チェックとキャストを1行で同時に行うことが可能です。

if (obj is One one) {
    Console.WriteLine("Class One");
}

この書き方では、型が一致した場合に自動的に変数 one へキャスト結果が代入されるため、明示的なキャスト((One)obj)が不要になり、コードがより簡潔で安全になります。現代のC#開発では、このパターンマッチング形式のis演算子を使うのが一般的です。

  1. JavaのProcessクラスとは?目的と主なメソッドを実例付きで解説

    概要java.lang.Processクラスは、Objectクラスのサブクラスであり、Runtimeクラスのexec()メソッドによって起動された外部プロセスを表現するためのクラスです。Processオブジェクトを通じて、起動したプロセスの制御や情報の取得を行うことができます。なお、Processクラスは抽象クラスとして定義されているため、直接インスタンス化することはできません。インスタンスは、Runtime.exec()などのメソッドの戻り値として取得します。主なメソッドdestroy(): プロセスを強制終了させるexitValue(): プロセスの終了コードを返すgetErrorStre

  2. Pythonの&=演算子とは?ビット演算とインプレース代入の仕組みを解説

    &=演算子の正体:object.__iand__()メソッドPythonにおける &= 演算子は、object.__iand__() メソッドに対するシンタックスシュガー(糖衣構文)です。公式ドキュメントには以下のように記載されています。「これらのメソッドは、拡張代入演算子(+=、-=、*=、@=、/=、//=、%=、**=、<<=、>>=、&=、^=、|=)を実装するために呼び出されます。これらのメソッドは、可能な限りインプレース(self自身を直接変更する形)で操作を行い、その結果を返すことが求められます(返り値はselfである必要はありませ