这是讨论的示例代码(考虑爬行动物“是”动物和哺乳动物“也是”动物)
Animal[] reptiles = new Reptile[]
{ new Reptile("lizard"), new Reptile("snake") };
Animal[] animals = new Animal[]
{ new Reptile("alligator"), new Mammal("dolphin") };
try
{
Array.ConstrainedCopy(animals, 0, reptiles, 0, 2);
}
catch (ArrayTypeMismatchException atme)
{
Console.WriteLine('[' + String.Join<Animal>(", ", reptiles) + ']');
}
当我运行此代码时,我得到一个 ArrayTypeMismatchException,并带有注释
Array.ConstrainedCopy 仅适用于可证明兼容的数组类型,无需对每个数组元素进行任何形式的装箱、拆箱、扩展或强制转换。更改数组类型(即,将 Derived[] 复制到 Base[]),或在 CER 中为 Array.Copy 不太强大的可靠性合约使用缓解策略,例如克隆数组或丢弃可能损坏的目标数组。
但是,当我查看MSDN时,我发现此方法也会引发InvalidCastException
. 抛出 an 的条件InvalidCastException
是:
sourceArray 中的至少一个元素不能转换为destinationArray 的类型。
所以我很困惑,你如何从这个方法中得到一个 InvalidCastException,如果它声明永远不会有任何数组元素的转换?