dynamic
действительно существует только во время компиляции. Например, если вы создаете List<dynamic>
, это действительно создает List<object>
. Таким образом, нет смысла использовать typeof(dynamic)
, поэтому третья строка не компилируется. Если вы передаете массив другому коду, то этот другой код использует этот массив - во время выполнения нет ничего, что могло бы существовать, чтобы «знать», что он предназначен для динамической типизации.
Но чтобы создать массив, вы должны предоставить length . Используемая вами перегрузка Array.CreateInstance
всегда использует нижнюю границу нуля. Вы хотите, чтобы перегрузка принимала два массива целых чисел - один для длин и один для нижних границ. Например:
using System;
class Program
{
static void Main()
{
Array outputs = Array.CreateInstance(
typeof(object), // Element type
new[] { 5 }, // Lengths
new[] { 1 }); // Lower bounds
for (int i = 1; i <= 5; i++)
{
outputs.SetValue($"Value {i}", i);
}
Console.WriteLine("Set indexes 1-5 successfully");
// This will throw an exception
outputs.SetValue("Bang", 0);
}
}