Экземпляры, использующие отражение
У меня есть класс с 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
}