Экземпляры, использующие отражение - PullRequest
0 голосов
/ 10 декабря 2018

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

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

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

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
}
0 голосов
/ 10 декабря 2018

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

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>) вы вставляете переменную типа.

...