К сожалению, вы можете хранить объекты в int[]
, которые на самом деле не являются int[]
.Есть некоторые действительные преобразования, которые, как вы надеетесь, не будут действительными, но на самом деле это так.Например, кто-то может написать:
ints = (int[])(object)new uint[5];
, и теперь тип ints
является массивом без знака int, а не массивом int.Это преобразование действительно неудачно (что оно действительно почти исключительно вызывает ошибки, когда оно возникает);было бы замечательно, если бы то, что вы опубликовали , могло бы быть инвариантом, но, к сожалению, Contract.Invariant
правильно, что это не так.