次のコードを検討してください。
でビルドし.NET framework 4.7.2
ます。
ushort[] a = new ushort[100];
if (a is short[])
{
Assert.Fail("This never happens.");
}
object b = a;
if (b is short[])
{
Assert.Fail("Why?");
}
最初のテストは期待どおりに機能します(a
のではありませんshort[]
)。私の質問は、予想外に失敗しない2 番目の testに関するものです。
なぜそうなのですか?
編集: MSIL を追加 (リリース、最適化)
.maxstack 8
IL_0000: ldc.i4.s 100
IL_0002: newarr [mscorlib]System.UInt16
IL_0007: isinst int16[]
IL_000c: brfalse.s IL_0018
IL_000e: ldstr "Why\?"
IL_0013: call void [(...).TestFramework](...).Assert::Fail(string)
IL_0018: ret