我创建了一个通用列表的子类,以便我可以实现一个新的接口
public class CustomersCollection : List<Customer>, IEnumerable<SqlDataRecord>
{
...
}
Run Code Online (Sandbox Code Playgroud)
当我将字段定义更改为新类时(请参阅下面的旧行和新行的示例),我会在原始列表中应该存在的内容上获得各种编译错误.
public CustomersCollection Customers { get; set; }
public void Sample()
{
Console.WriteLine(Customers.Where(x=>x.condition).First().ToString());
}
Run Code Online (Sandbox Code Playgroud)
为什么CustomersCollection不继承List的IQueryable,IEnumerable接口实现?
官方错误是:
'CustomersCollection'不包含'Where'的定义,也没有扩展方法'Where'可以找到接受'CustomersCollection'类型的第一个参数(你是否缺少using指令或汇编引用?)
事实证明,IEnumerable的自定义实现会导致适用于IEnumerable的所有扩展方法失败.这里发生了什么?
Ant*_*ram 11
扩展方法是适用于从继承的类List<T>.也许您需要添加using System.Linq;到您的代码文件中?还要检查您是否有参考System.Core.dll.
编辑
既然你已经List<U>和IEnumerable<T>由同一个类被继承/实现,您需要在使用扩展方法提供的类型.例:
CustomerCollection customers = new CustomerCollection();
customers.Add(new Customer() { Name = "Adam" });
customers.Add(new Customer() { Name = "Bonita" });
foreach (Customer c in customers.Where<Customer>(c => c.Name == "Adam"))
{
Console.WriteLine(c.Name);
}
Run Code Online (Sandbox Code Playgroud)
... 基于
class Customer { public string Name { get; set; } }
class Foo { }
class CustomerCollection : List<Customer>, IEnumerable<Foo>
{
private IList<Foo> foos = new List<Foo>();
public new IEnumerator<Foo> GetEnumerator()
{
return foos.GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)