Список различных универсальных типов, динамическое приведение - PullRequest
0 голосов
/ 23 декабря 2011

У меня следующая проблема:

  • Мне нужно хранить объекты общего назначения с параметрами другого типа, что-то вроде javish Sth<A,?>,
  • "?"типы обычно являются примитивами, поэтому не очень расширяемые / изменяемые
  • Мне нужно выполнить несколько методов для каждого элемента моего списка
    • разные методы для разных типов или, по крайней мере, разные перегрузки этих методов

Хотя я не знаю, как хранить такие типы, давайте для простоты предположим List<object>.

Я мог бы где-то хранить рассматриваемый тип (List<KeyValuePair<Type,object>>), получая его с typeof(), но как я могу привести свой объект обратно к требуемому типу?Что-то вроде

foreach(var entry in myList)
{
    var obj = (Sth<A, entry.Key>) entry.Value;
    myMethod(obj); //This can have overloads for object, Sth<A,int>, Sth<A,string>,
                   // etc. Generally, I need a correct type of obj here.
}

Конечно, myMethod<T> - это универсальный библиотечный метод со слишком большим количеством перегрузок, чтобы если-либо его с obj is Sth<A, uint> ...

Я думаю, я мог бы создать новыйобъект на основе entry.Key и затем заполнение

Возможны ли такие комбинации с типами?

Я полагаю, что ответ заключается в правильном создании myList, но я не знаюкак это сделать.

Любая помощь будет оценена!

С Рождеством:)

1 Ответ

6 голосов
/ 23 декабря 2011

Если вы используете C # 4, вы можете использовать для этого dynamic:

foreach (KeyValuePair<A, object> entry in myList)
{
    dynamic value = entry.Value;
    myMethod(value);
}

Разрешение перегрузки теперь будет выполняться во время выполнения на основе типа времени выполнения value.

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