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/

相关文章:

c# - AsyncLocal 与 ASP.NET Core Controller /ServiceProviderScope

c# - 不使用 BindingFlag.Default 从 GetType().GetFields 获取字段

c# - 使用反射从静态类内部的静态类中获取所有字段

c# - 如何循环checklistbox中的所有数据?

c# - VS2012 构建失败,代码为 9009

c# - 如何使用 System.IdentityModel.Tokens.Jwt 包提取 token 过期时间

c# - 如何在 Windows 设备之间使用相同的随机种子?

c# - 串行端口事件的可视化工具(用于发送和接收的数据)

c# - Process.Start() 和进程树

c# - PropertyGrid、DefaultValueAttribute、动态对象和枚举