9

質問が変だと思いますか?はい、何が起こったのかも奇妙です。説明させてください。

このCovariance and Contravariance with C# Arraysからスニペットを見つけました

string[] strings = new string[1];
object[] objects = strings;
objects[0] = new object();

Jon skeet は、上記のコードは をスローすると説明しArrayTypeMismatchExceptionています。

私がしたことは、3 行目にブレークポイントを配置することです。DebuggerVisualizer を使用して手動で設定objects[0] = new object()すると、エラーは発生せず、動作します。後でチェックするとstrings[0].GetType()System.Object が返されます。System.Object上記の手順で string[] に任意の型を設定できるだけではありません。

これがどのように起こったのかわかりません。これを見たのとまったく同じ質問で、あそこにコメントとして質問を提起しましたが、答えはありません。

背後で何が起こっているのか知りたいです。誰か説明してください。

Edit1 これも面白い

上記の動作を再現した後、これを試してください

int len = strings[0].Length;

プロパティの長さの上にマウスを置くとstrings[0].Length threw ArgumentException、メッセージCannot find the method on the object instanceが表示されますが、実際には例外がスローされず、コードが実行されて結果が得られますlen=0

4

2 に答える 2