c# - 可以将泛型类型列表转换为其父类(super class)型的泛型列表吗?

标签 c# .net reflection generics

下面正在尝试做,但是显然对反射了解不够。

我正在尝试做的示例是,我想将 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/

相关文章:

java - 使用 Java Reflection 来确定要实例化哪个类

C#重构这段乱七八糟的代码!

javascript - 使用 SignalR 从 C# 调用 JS 方法?

c# - 如何在C#中获取游标的大小

c# - 在 Windows Phone 中解析 JSON 失败

c# - 如何使用 Expression<Func> 设置嵌套属性?

C# 反射 : getting a nested objects properties

c# - 是否有隐藏的 "using"添加到 C# 类?

c# - 无法将 Select() 的结果转换为 List<T>

.net - 我什么时候应该使用编译的 Regex 与解释的?