ここに議論のためのサンプルコードがあります(爬虫類は「動物であり、哺乳類は「動物でもある」と考えてください)
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[] にコピーする) か、配列のクローンを作成するか、破損している可能性のあるコピー先配列を破棄するなど、Array.Copy のあまり強力でない信頼性コントラクトに対して CER で緩和戦略を使用します。
ただし、MSDNを見ると、このメソッドもInvalidCastException
. を投げる条件InvalidCastException
は次のとおりです。
sourceArray の少なくとも 1 つの要素を destinationArray の型にキャストできません。
だから私は困惑しています、配列要素のキャストが決してできないと述べている場合、どうすればこのメソッドから InvalidCastException を取得できますか?