Объявите myObjectArray
как массив object
s:
object[] myObjectArray = myTypedArray;
myObjectArray[0] = new MyType(); // okay to go!
В качестве альтернативы, если по какой-то причине myObjectArray
должно быть object
, вы можете сказать:
((object[])myObjectArray)[0] = new MyType();
Хотя они вонючие. И остерегайтесь ковариации массива в C # !
Вот реализация в том же духе, которую вы, похоже, ищете:
void AddToArray(object array, int index) {
if(array == null) {
throw new ArgumentNullException();
}
Type arrayType = array.GetType();
if(!arrayType.IsArray) {
throw new InvalidOperationException("array must be an Array");
}
(Array)asArray = (Array)array;
if (index < 0 || index >= asArray.Length) {
throw new ArgumentOutOfRangeException("index");
}
object newInstance = Activator.CreateInstance(elementType);
asArray.SetValue(newInstance, index);
}
Вызывать как:
AddToArray(myObjectArray, 0);
Предполагается, что elementType
имеет конструктор без параметров. Есть способы обойти это, но этого должно быть достаточно, чтобы вы начали. Этот метод также, вероятно, нуждается в лучшем названии.
Опять же, этот код очень вонючий. Я бы предложил сделать шаг назад и посмотреть, сможете ли вы решить свою проблему, используя строго типизированный код.