Может ли String [] содержать внутри System.Object?

Вы чувствуете, что вопрос странный? да, что случилось также странно. позволь мне объяснить.

Я нашел фрагмент из этогоКовариантность и контравариантность с массивами C #

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

Джон Скит объясняет, что приведенный выше кодArrayTypeMismatchExceptionкак сказал да это так.

то, что я сделал, я поставил точку останова в строке 3, используя DebuggerVisualizer, я вручную установитьobjects[0] = new object() это неВыкидывать любую ошибку, и это работает. позже проверкаstrings[0].GetType() возвращает System.Object. не толькоSystem.Object любой тип может быть установлен в строке [] вышеупомянутой процедурой.

Я понятия не имею, как это произошло, я поднял свой вопрос в качестве комментария к тому же вопросу, который я видел, но ответов не было.

Мне любопытно узнать, что происходит позади. Кто-нибудь объяснить, пожалуйста.

Edit1 Это даже интересно

После воспроизведения описанного выше поведения попробуйте это

int len = strings[0].Length;

если вы поместите мышь над свойством Длина говоритstrings[0].Length threw ArgumentException с сообщениемCannot find the method on the object instance но на самом деле это не выдает исключение, и код работает, дающий результатlen=0

Ответы на вопрос(2)

Ваш ответ на вопрос