C# 铸造列表<;基类>;到列表<;derivedclass>;

C# 铸造列表<;基类>;到列表<;derivedclass>;,c#,.net,casting,generic-list,C#,.net,Casting,Generic List,我有许多类都是从基类继承的-实际上基类只是一个接口的包装器,允许序列化,因此: public abstract class VoucherRuleBase : IRule{ public abstract bool Save(int nodeID); } public class ActiveDateRule : VoucherRuleBase{ public DateTime ActiveDateRuleProperty{get;set;} ...etc } 然后,我有一

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

public abstract class VoucherRuleBase : IRule{
    public abstract bool Save(int nodeID);
}

public class ActiveDateRule : VoucherRuleBase{
   public DateTime ActiveDateRuleProperty{get;set;}
  ...etc
}
然后,我有一个
列表
,其中包含许多
ActiveDateRule
对象或许多其他派生类。列表中总是充满相同的类型,即所有ActiveDateRules或其他派生类之一

我需要将列表强制转换为列表,因为我正在尝试将列表绑定到网格,但是网格只看到基类,因此找不到任何属性。在运行时.NET知道“真实”类型,但在编译时我无法将其转换。这是因为在每个派生类上都没有一些构造函数来进行转换的情况下,这是不可能的吗

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

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

您是否尝试过
myList.Cast

您是否尝试过
myList.Cast

尝试使用
as

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

尝试将
用作

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

这里的基类是基类的列表。 DerivedClass1是你的Derived类

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

这里的基类是基类的列表。 DerivedClass1是你的Derived类

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

抱歉,它正在将列表传递给尚未重新编译且已设置为基类类型的控件。。啊!.OfType()和.Cast()都起作用。。抱歉,它正在将列表传递给一个尚未重新编译且已设置为基类类型的控件。。啊!.OfType()和.Cast()都有效。。