下面正在尝试做,但是显然对反射了解不够。
我正在尝试做的示例是,我想将 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);
}
最佳答案
您不需要对此进行反射(reflection)。另一方面,LINQ 可以在此处提供帮助:
List<JazzDancer> myListOfJazzDancers = ...;
List<Dancer> myListOfDancers = myListOfJazzDancers.Cast<Dancer>().ToList()
关于c# - 可以将泛型类型列表转换为其父类(super class)型的泛型列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4208907/