Я получил System.Object (объект AKA), который представляет собой простой одномерный массив (я делаю много проверок). Тип элемента станет известен во время выполнения. Я должен сделать два типа копирования массива:
1) сам массив глубокой копии, но мелкие элементы копирования: - здесь есть ответ: мой предыдущий вопрос 2) сам массив глубокой копии кака также его элементы:
Я сделал это так:
public object FullDeepCopy_SimpleArray(object original)
{
Type elementType = original.GetType().GetElementType();
return GetType()
.GetMethod("Create_DeepCopyArray")
.MakeGenericMethod(elementType)
.Invoke(this, new object[] { original });
}
//used in generic invoke
public T[] Create_DeepCopyArray<T>(object original)
{
T[] origArray = (T[])((Array)original).Clone();
int length = origArray.Length;
T[] copy = (T[])(Array.CreateInstance(typeof(T), length));
for (int i = 0; i < length; i++)
{
copy[i] = (T)Create_infDeep_CopyOf(origArray[i]); // this makes the deep copy of any item
}
return copy;
}
Работает отлично, но возникает некоторые проблемы:
- работать с ним небезопасно,другие программисты могут удалить метод
Create_DeepCopyArray
, так как он используется только в коде GetMethod
, а IDE Visual Studio не распознает его как использованный (поскольку он передается в виде строки) - Посмотрите на количество приведений в
Create_DeepCopyArray
метод, я думаю, что должно быть лучшее решение
У вас есть какие-нибудь идеи по улучшению этого?