如何在我的BindingList <t>的自定义子类上访问IEnumerable <t>扩展方法?</t> </t>

时间:2010-12-31 16:41:03

标签: c# linq extension-methods

我有BindingList的自定义子类&lt; T&gt;我想使用方便的扩展方法执行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 个答案:

答案 0 :(得分:1)

看起来编译器可能会抱怨Sum试图执行的类型参数,因为它无法推断。您可以像这样指定类型参数;其中T是您要执行Sum的类型。

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

但是应该注意的是,即使在没有设置类型参数的情况下恢复到基础BindingList<T>,您的样本也都不会为我编译。