2

我有一个继承自的集合类,BindingList我可以Sum在它上面使用函数,例如myList.Sum(x=>x.Quantity).

但是当我实现接口时,IEnumerable<SqlDataRecord>我不能再使用它了,x.Quantity没有作为选项给出。我该如何解决这个问题?

class item
{
    public decimal Quantity { get; set; }
}

class items : BindingList<T>
{
}

items newItems = new items();
items.Sum(x=>x.Quantity);

上面的代码有效,但是当我添加以下代码时,它不再有效。它说该类没有Sum. 我究竟做错了什么?

class items : BindingList<T>, IEnumerable<SqlDataRecord>
{
}
items.Sum(x=>x.?);
4

1 回答 1

3

当您的类仅继承BindingList<T>时,myList.Sum(...)明确地调用Enumerable<T>.Sum(myList, ...)viaBindingList<T>的继承自 Collection<T>.

现在您已经使您的类直接实现IEnumerable<SqlDataRecord>,不再清楚调用哪种类型- 是来自您的继承还是来自您的直接实现?Enumerable<?>Sum?TBindingListSqlDataRecord

(出于某种原因,我的 VS 将此报告为“不包含定义......”而不是模棱两可的调用。)

因此,如果您想像以前一样拨打电话,则必须明确拨打myList.Sum<T>(...).

于 2012-09-24T10:41:37.607 回答