转换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知道"真正的"类型,只是在编译时我不能转换它。这是因为如果在每个派生类上没有构造函数来进行转换,这是不可能的吗?
我在这里搜索过,确实有其他类似的问题,但我没有任何运气与这些解决方案。
如有任何帮助,我将一如既往地感激。由于您试过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();