LinQ विधि कास्ट जो टाइप करने के लिए टी सूची में प्रत्येक प्रविष्टि डाले हैं। कहते हैं कि हम एक सूची है जो ऐसा दिखाई देता है की सुविधा देता है:Linq System.Type साथ <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 को कुछ सह/अनुबंध-भिन्नता का समर्थन करना चाहिए जो इसे करने का एक तरीका हो सकता है।
अतिरिक्त सूचना और प्रतिबिंब 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]
है। ध्यान दें कि क्रैशएन्ट्री IStaticEntry लागू करता है लेकिन इसे कास्ट नहीं किया जा सकता क्योंकि यह सूची का एक सामान्य प्रकार है।
मैं के माध्यम से निम्नलिखित समाधान का निर्माण मैं करूंगा Stille प्रतिबिंब के बिना कुछ की तरह:
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 –