C# の as 演算子

C# の as 演算子とは

C# の as 演算子はキャストを試み、キャストできない場合にキャストできないという例外をスローするのではなく null を返します。

C# の as 演算子を使う簡単な例

as 演算子を使う具体例をみてみましょう。

まずは比較のため、 as 演算子を使わない場合です。

次の Foo 関数では引数として受け取った object 型の o を int にキャストしています (13行目)。そしてキャストした値を出力しています。

using System;

class Program
{
  static void Main(string[] args)
  {
    Foo(12);
    Foo("Hello");
  }

  static void Foo(object o)
  {
    int m = (int)o;
    Console.WriteLine(m);
  }
}

7-8行目では Foo 関数を呼び出しています。ひとつ目の呼び出しでは引数として 12 を渡しており、 二つ目の呼び出しでは引数として "Hello" という文字列を渡しています。

この実行結果は次の通りです。

dotnet run
12
Unhandled exception. System.InvalidCastException: 
Unable to cast object of type 'System.String' to type 'System.Int32'.
   at Program.Foo(Object o) in /Users/.../Program.cs:line 13
   at Program.Main(String[] args) in /Users/.../Program.cs:line 8

12 は int 型ですから、int のキャストは成功します。

しかし、 "Hello" という文字列を int にキャストしようとしても、キャストできないので InvalidCastException が発生しました。

そこで、 as 演算子を使って書き換えてみましょう。

  static void Foo(object o)
  {
    int? m = o as int?;
    Console.WriteLine(m);
  }

この実行結果は次のようになります。

12

例外はキャストができない、という例外は発生しません。

その代わり、13 行目の m は null となります。

このように as 演算子を使うとキャストできない場合に、InvalidCastException を発生させずに null となります。

null となる場合があるので、もとは int 型としていましたが Nullable の int? としています。

以上、C# の as 演算子について説明しました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 C# 入門