Экземпляры, использующие отражение

У меня есть класс с 2 свойствами. Один является List<double> а другой является Queue<double>, У меня есть только Type информация во время выполнения. Мне нужно создать экземпляр и заполнить оба свойства. Есть ли общий способ сделать это? Я создал метод, который создаст IEnumerable потому что это общий интерфейс для них обоих. Тем не менее, теперь я застрял с IEnumerable и я не знаю, как бросить что-то полезное для Add или же Enqueue основанный на Type,

2 ответа

Как насчет этого:

dynamic collection = Activator.CreateInstance(typeof(List<double>));
        if (collection.GetType() == typeof(Queue<double>))
        {
            collection.Enqueue(1);
        }
        else if(collection.GetType() == typeof(List<double>))
        {
            collection.Add(1);
        }

и вместо typeof(List<double>) Вы вставляете переменную вашего типа.

Я не уверен, в чем твоя проблема. Но (для меня) это звучит так, как будто вы хотите, чтобы контейнерный класс управлял двумя различными структурами данных.

class MyContainerClass<T> : IContainer
{
    private List<T> list;
    private Queue<T> queue ;

    public MyContainerClass(){
        list = new List<T>();
        queue = new Queue<T>();
    }

    public virtual void Add(T value){
        //Logic for handling add
        list.Add(value);
        queue.Enqueue(value);
    }


    public virtual void Remove(T value)
    {
        //Logic for handling remove
    }

    //Etc
}
Другие вопросы по тегам