LINQ chứa các phương pháp Cast mà phôi mỗi mục trong danh sách để gõ T. Cho phép nói rằng chúng tôi có một danh sách mà trông giống như sau:LINQ Cast <T> với System.Type
List<Object> obj = new List<Object>();
obj.Add("A");
obj.Add("B");
Một dàn diễn viên làm việc có thể là
var list = obj.Cast<string>();
Những gì tôi muốn làm việc
Type t = typeof(String);
Object list = obj.Cast(t);
Một giải pháp sẽ được sử dụng phản ánh và chung chung tạo ra một danh sách và cư nó nhưng tôi đã tự hỏi nếu có tồn tại bất kỳ giải pháp tốt hơn? Nghe nói rằng .NET 4.0 nên hỗ trợ một số co/contra-variance mà có thể là một cách để làm điều đó.
thêm thông tin và Reflection soulution
Các lỗi tôi nhận được là 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]
sau. Lưu ý rằng CrashEntry thực hiện IStaticEntry nhưng không thể được đúc vì nó là một kiểu chung của danh sách.
tôi xây dựng các giải pháp sau đây qua tôi sẽ stille như một cái gì đó mà không Reflection:
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;
}
http://geekswithblogs.net/abhijeetp/archive/2010/01/10/covariance-and-contravariance-in-c-4.0.aspx –