[英]Possible to cast generic list of type to a generic list of its super type?
試圖在下面做,但顯然對反射知之甚少。
我想要做的例子是,我想將一個JazzDancer列表“解析”為一個Dancer列表(所有舞者類型都繼承自)。 想要確保如果DanceStyle在這里是Jazz,那么只有JazzDancer類型會出現在舞者列表中。 希望這是有道理的。
問題是你似乎無法將List轉換為List。
這甚至可能嗎?
List<Dancer> dancers = TypeNameResolver<Dancer>.ResolveList(DanceStyle, typeof(Dancer));
public static List<T> ResolveList(IDanceStyle style, Type toType)
{
Type list = typeof (List<>);
Type[] pars = { TypeNameResolver<T>.Resolve(style,toType).GetType()};
List<T> result = (List<T>)Activator.CreateInstance(list.MakeGenericType(pars));
return result;
}
public static T Resolve(IDanceStyle style, Type toType)
{
Assembly a = Assembly.GetExecutingAssembly();
var typeName = style.GetType().Name + toType.Name;
var toTypeNameSpace = toType.Namespace;
return (T)a.CreateInstance(toTypeNameSpace + "." + typeName);
}
你不需要反思。 另一方面,LINQ可以在這里提供幫助:
List<JazzDancer> myListOfJazzDancers = ...;
List<Dancer> myListOfDancers = myListOfJazzDancers.Cast<Dancer>().ToList()
您可以使用Linq查詢執行此操作:
dancers = jazzDancers.Cast<Dancer>();
如果你需要做一些每個jazzDancer檢查的,你只需要添加一個Where
,例如:
dancers = jazzDancers.Where(jd => jd.SomeFiels == Something).Cast<Dancer>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.