簡體   English   中英

可以將類型的通用列表轉換為其超類型的通用列表嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM