【C#】is演算子とas演算子とは

is演算子とは

is演算子とは2つのオブジェクトを比較し、変換可能であるかどうかを取得する型テスト演算子です

■公式ドキュメント
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/is

A is B // AがBに変換可能かどうかbool型の論理値(true/false)で返す

is演算子を使用することで、キャスト(変換)出来るかどうかをチェックすることができます。

 

サンプルコード

using System;

namespace c_is
{
    class Sample
    {
        internal int Calculation(int a, int b)
        {
            int result = a + b;

            return result;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Sample sample = new Sample();

            if (sample is Sample) // 変換可能かどうか
            {
                string cal = sample.Calculation(10, 20).ToString();

                Console.WriteLine(cal);
            }
            else
            {
                Console.WriteLine("キャストに失敗しました");
            }
        }
    }
}

is演算子では、変換可能な場合「true」を返し、変換できなかった場合には、「false」を返します。

is演算子の他にも「typeof演算子」で型テストを行うこともできます。

詳しくは、下記の記事を参考ください。
 

【C#】nameofとtypeofの使い方

2021.05.12

 

as演算子とは

as演算子はオブジェクトを別の型のオブジェクトに変換するキャスト演算子です

■公式ドキュメント
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/type-testing-and-cast#as-operator

A as B // AがBに変換可能かどうか

as演算子では、変換に失敗した場合に「null」を返します。

 

サンプルコード

using System;

namespace c_as
{
    class Program
    {
        static void Main(string[] args)
        {
            object example = "as演算子";

            Program program = example as Program;

            if (program == null)
            {
                Console.WriteLine("nullです");
            }
            else
            {
                Console.WriteLine(program);
            }
        }
    }
}

実行結果:

nullです

上記のように、as演算子では、キャストに失敗した場合に「null」を返します。

 

LINQを使ってキャストする方法

is演算子、as演算子の他にも、LINQのCastメソッドOfTypeメソッドを使用することにより、キャストすることができます。

詳しくは、下記の記事を参考ください。

【C#】LINQのCastメソッドとOfTypeメソッドの違いとは

2021.05.07

 

参考書籍

■C#を学習し始めた方向け
やさしいC 第3版 (「やさしい」シリーズ)

1週間でCの基礎が学べる本

確かな力が身につくC「超」入門 第2版 (Informatics&IDEA)

■C#をある程度学習した方向け
基礎からしっかり学ぶCの教科書 改訂新版 (マイクロソフト関連書)

独習C 新版

Effective C 6.0/7.0