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 演算子について説明しました。