Как я могу получить доступ к методам расширения IEnumerable <T>в моем пользовательском подклассе BindingList <T>? - PullRequest
0 голосов
/ 31 декабря 2010

У меня есть собственный подкласс BindingList , для которого я хочу выполнить запрос LINQ, используя удобные методы расширения. Например:

public int GetSum(MyList<T> list)
{
   return list.Sum(x => x.Value);
}

Но компилятор жалуется, что не может разрешить Sum, потому что он не распознает list как IEnumerable<T>, что, очевидно, так, потому что это работает:

public int GetSum(MyList<T> list)
{
   return ((IEnumerable<T>)list).Sum(x => x.Value);
}

У кого-нибудь есть умный способ избежать уродливого и ненужного броска?

1 Ответ

1 голос
/ 31 декабря 2010

Может показаться, что компилятор жаловался на аргумент типа, который Sum пытается выполнить, поскольку он не может быть выведен.Вы можете указать аргумент типа следующим образом:где T - тип, для которого вы хотите выполнить Sum.

return list.Sum<T>(x => x.Value);

Следует отметить, однако, что ни один из ваших примеров не скомпилируется для меня даже при возврате к базе BindingList<T> без установки типааргумент.

...