試圖在下面做,但對反射顯然不夠了解。可能將通用類型列表轉換爲其超類型的通用列表?
我想要做的事情的例子是,我想將「JazzDancer」列表「解析」爲舞者(所有舞者類型從中繼承)的列表。想要確保如果這裏的DanceStyle是Jazz,那麼只有JazzDancer類型會出現在舞者列表中。希望這是有道理的。
問題是您似乎無法將列表轉換爲列表。
這可能嗎?
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);
}
謝謝你,它的工作原理。那麼我意識到我無法真正將JazzDancers列表轉換爲舞者列表,並且仍然可以將其列爲JazzDancers,當可以通過使用列表 .Add方法並在那裏添加實際的JazzDancers實例時。 –
andryuha
2010-11-18 03:12:07
@andryuha:好吧,如果您確定列表中只包含JazzDancers,那麼您可以在將它們轉換爲JazzDancers後將其轉換爲JazzDancers。另一方面,如果你確定它只包含JazzDancers,那麼你最好使用'List'...... –
Heinzi
2010-11-18 15:02:34