質問が変だと思いますか?はい、何が起こったのかも奇妙です。説明させてください。
この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