Бросок Linq <T> с системой. Ввести

LinQ содержит Бросок метода, который бросает каждую запись в списке к типу T. Позволяет говорят, что у нас есть список, который похож на следующее:

List<Object> obj = new List<Object>();
obj.Add("A");
obj.Add("B");

Бросок работы мог быть

var list = obj.Cast<string>();

Что я хотел бы работать

Type t = typeof(String);
Object list = obj.Cast(t);

Решение состояло бы в том, чтобы использовать отражение и универсально создать список и заполнить его, но я задавался вопросом, существуют ли там какое-либо лучшее решение? Услышанный, что.NET 4.0 должна поддерживать некоторый co/contra-variance, который может быть способом сделать это.


Дополнительная информация и отражательный Soulution

Ошибка, которую я получаю, следующая The model item passed into the dictionary is of type System.Collections.Generic.List1[IStatisticEntry], but this dictionary requires a model item of type System.Collections.Generic.List1[CrashStatistic+CrashEntry]. Обратите внимание, что CrashEntry реализует IStaticEntry, но не может быть литым, потому что это - универсальный тип списка.

Я создал доводящее до конца решение, я буду турникет как что-то без Отражения:

    public static object Cast(this IEnumerable list, Type type)
    {
        var newList = Activator.CreateInstance(typeof(List<>).MakeGenericType(type));

        foreach (var item in list)
            newList.GetType().GetMethod("Add").Invoke(newList, new object[] { item });

        return newList;
    }
6
задан Søren L. 10 August 2010 в 13:40
поделиться