转换list到list<派生类>

本文关键字:list 派生 baseclass 转换 | 更新日期: 2023-09-27 18:15:57

我有许多类都继承自一个基类——基类实际上只是一个接口的包装器,允许序列化,因此:

public abstract class VoucherRuleBase : IRule{
    public abstract bool Save(int nodeID);
}
public class ActiveDateRule : VoucherRuleBase{
   public DateTime ActiveDateRuleProperty{get;set;}
  ...etc
}

然后我有一个List<VoucherRuleBase>,它包含许多ActiveDateRule对象,或许多其他派生类。列表中总是充满了相同的类型。所有activedaterrules或其他派生类中的一个。

我需要将列表转换为列表,因为我试图将列表绑定到网格,但由于网格只看到基类,它找不到任何属性。在运行时。net知道"真正的"类型,只是在编译时我不能转换它。这是因为如果在每个派生类上没有构造函数来进行转换,这是不可能的吗?

我在这里搜索过,确实有其他类似的问题,但我没有任何运气与这些解决方案。

如有任何帮助,我将一如既往地感激。由于

转换list<baseclass>到list<派生类>

您试过myList.Cast<BaseClass>吗?

尝试使用as

List<VoucherRuleBase> voucherRules = new List<VoucherRuleBase>();
var activeDateRules = voucherRules.Select(x => x as ActiveDateRule);

你没有这样做隐式强制转换,你可以过滤掉对象通过使用Where和过滤类型不是null

var activeDateRules = voucherRules.Select(x => x as ActiveDateRule).Where(x => x != null);

这里basecclasses是基类的列表。而DerivedClass1是你的派生类。

var derivedClasses = baseClasses.Where(item => item.GetType() == typeof(DerivedClass1)).ToList();