Как глубоко копировать элементы массива с неизвестным типом во время выполнения без использования MakeGenericMethod? - PullRequest
0 голосов
/ 21 октября 2019

Я получил 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 метод, я думаю, что должно быть лучшее решение

У вас есть какие-нибудь идеи по улучшению этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...