2

から継承するコレクション クラスがあり、その上で などBindingListの関数を使用できます。SummyList.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, ...)BindingList<T>Collection<T>

これで、クラスに を直接実装するようになりました。どのタイプのを呼び出すIEnumerable<SqlDataRecord>かが明確ではなくなりました。これは、継承によるものなのか、直接実装によるものなのか?Enumerable<?>Sum?TBindingListSqlDataRecord

(何らかの理由で、VS はこれをあいまいな呼び出しとしてではなく、「定義が含まれていません...」と報告します。)

したがって、以前と同じように呼び出したい場合は、明示的に呼び出す必要がありますmyList.Sum<T>(...)

于 2012-09-24T10:41:37.607 に答える