你觉得问题很奇怪吗?是的,发生的事情也很奇怪。让我解释。
我从这个Covariance and Contravariance with C# Arrays中找到了一个片段
string[] strings = new string[1];
object[] objects = strings;
objects[0] = new object();
Jon skeet 解释说上面的代码会 throw 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