興味深いことに、この場合、2つのバージョンは同一のILを生成します。
コード:
void Main() {
Class1 inst1 = new Class1();
((inst1 as Class1) != null).Dump();
Class1 inst2 = new Class1();
(inst2 is Class1).Dump();
}
class Class1 { }
IL:
IL_0001: newobj UserQuery+Class1..ctor
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: ldnull
IL_0009: ceq
IL_000B: ldc.i4.0
IL_000C: ceq
IL_000E: call LINQPad.Extensions.Dump
IL_0013: pop
IL_0014: newobj UserQuery+Class1..ctor
IL_0019: stloc.1
IL_001A: ldloc.1
IL_001B: ldnull
IL_001C: ceq
IL_001E: ldc.i4.0
IL_001F: ceq
IL_0021: call LINQPad.Extensions.Dump
Class1..ctor:
IL_0000: ldarg.0
IL_0001: call System.Object..ctor
IL_0006: ret