Исследуя ошибку, я обнаружил, что это связано с этой странностью в С#:
sbyte[] foo = new sbyte[10];
object bar = foo;
Console.WriteLine("{0} {1} {2} {3}",
foo is sbyte[], foo is byte[], bar is sbyte[], bar is byte[]);
Вывод "True False True True", в то время как я ожидал бы "bar is byte[]
" для возврата False. Очевидно, что бар является a byte[]
и a sbyte[]
? То же самое происходит и для других типов подписанных/неподписанных типов, таких как Int32[]
vs UInt32[]
, но не для слова Int32[]
vs Int64[]
.
Может ли кто-нибудь объяснить это поведение? Это в .NET 3.5.