2

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

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

public class ActiveDateRule : VoucherRuleBase{
   public DateTime ActiveDateRuleProperty{get;set;}
  ...etc
}

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

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

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

任何帮助都非常感谢..谢谢

4

3 回答 3

3

你试过myList.Cast<BaseClass>吗?

于 2013-05-30T10:30:56.320 回答
1

尝试使用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);
于 2013-05-30T10:33:08.100 回答
0

这里 baseClasses 是您的基类的列表。DerivedClass1 是您的派生类。

var derivedClasses = baseClasses.Where(item => item.GetType() == typeof(DerivedClass1)).ToList();
于 2013-05-30T10:43:02.967 回答