// castbench.cs using System; class CastBench { class Sample1 { public int n = 1; } class Sample2 { } private static int testCast(object [] testdata) { int sum = 0; foreach (object o in testdata) { try { sum += ((Sample1)o).n; } catch(InvalidCastException) { sum += 1; } } return sum; } private static int testAs(object [] testdata) { int sum = 0; foreach (object o in testdata) { Sample1 s = o as Sample1; if (s != null) { sum += s.n; } else { sum += 1; } } return sum; } private static int testIsCast(object [] testdata) { int sum = 0; foreach (object o in testdata) { if (o is Sample1) { sum += ((Sample1)o).n; } else { sum += 1; } } return sum; } public static void Main() { object [] testdata = new object[1000000]; for (int i = 0; i < testdata.Length; i++) { if (i % 1000 != 0) { testdata[i] = new Sample1(); } else { testdata[i] = new Sample2(); } } DateTime startCast = DateTime.Now; for (int i = 0; i < 1000; i++) testCast(testdata); DateTime endCast = DateTime.Now; Console.WriteLine("キャストの実行時間 {0}", endCast - startCast); // 出力例:キャストの実行時間 00:00:47.9899632 DateTime startAs = DateTime.Now; for (int i = 0; i < 1000; i++) testAs(testdata); DateTime endAs = DateTime.Now; Console.WriteLine("as演算子の実行時間 {0}", endAs - startAs); // 出力例:as演算子の実行時間 00:00:11.7771696 DateTime startIsCats = DateTime.Now; for (int i = 0; i < 1000; i++) testIsCast(testdata); DateTime endIsCast = DateTime.Now; Console.WriteLine("is演算子+キャストの実行時間 {0}", endIsCast - startIsCats); // 出力例:is演算子+キャストの実行時間 00:00:20.7702804 } } // コンパイル方法:csc castbench.cs