【发布时间】:2010-06-24 23:09:47
【问题描述】:
我创建了一个通用列表的子类,以便我可以实现一个新接口
public class CustomersCollection : List<Customer>, IEnumerable<SqlDataRecord>
{
...
}
当我将字段定义更改为新类时(请参阅下面的新旧行示例),我会在原始列表中应该存在的内容上遇到各种编译错误。
public CustomersCollection Customers { get; set; }
public void Sample()
{
Console.WriteLine(Customers.Where(x=>x.condition).First().ToString());
}
为什么CustomersCollection不继承List的IQueryable、IEnumerable接口实现?
官方的错误是:
'CustomersCollection' 不包含 'Where' 和 no 的定义 扩展方法“Where”接受 类型的第一个参数 可以找到“CustomersCollection” (您是否缺少 using 指令或 程序集参考?)
事实证明,IEnumerable 的自定义实现会导致所有适用于 IEnumerable 的扩展方法失败。这是怎么回事?
【问题讨论】:
-
您确定从实现
IEnumerable<Customer>的类继承但重写它以实现IEnumerable<SqlDataRecord>是否有意义?简单地添加一个返回IEnumerable<SqlDataRecord>的方法以避免复杂化不是更好吗?
标签: c# inheritance