пул объектов c# с универсальными и клонированными по элементам, проблема с возвратом к T

#c# #generics #casting

Вопрос:

Я пытаюсь создать пул универсальных средств, который будет принимать любой объект, если он поддерживает сериализацию(рабочую) или объекты, поддерживающие IClonable. Проблема, с которой я столкнулся, заключается в том, что IClonable необходимо вернуть к типу шаблона. Но он не справляется с кастингом во время выполнения, есть идеи?

     private void AddClones(int numberToAdd)
    {
        
        for (int x = 0; x < numberToAdd; x  )
            if (typeof(T).IsSerializable)
            {
                pool.AddFirst(DeepCopy(objectToClone));
            }
            else
            {
                ICloneable myclone = (ICloneable)objectToClone;
                pool.AddFirst((T)myclone.Clone());    // fails here
            }
    }
 

Исключением является
Система.Исключение InvalidCastException: Система «Невозможно привести объект типа».Объект» для ввода «.Класс». » Я проверил с помощью отладчика, и код правильно создает myclone, он просто не будет изменять тип шаблона T. Есть ли какие-нибудь хорошие обходные пути?

Комментарии:

1. ICloneable. Клонирование гарантирует только то, что возвращаемое значение равно object . Подумайте о проверке, чтобы убедиться, что клонированный объект действительно относится к типу T с if(myclone.Clone() is T isClone) pool.AddFirst(isClone); или чему-то подобному, иначе у нас не будет много информации, по которой можно было бы дать совет, поскольку мы не видим связанных классов