这是一些代码的一部分,在我同事的机器上工作得很好,但是当我试图编译解决方案时,我得到了错误:
“System.Collections.Generic.ICollection”不包含“RemoveAll”的定义,并且找不到接受类型为“System.Collections.Generic.ICollection”的第一个参数的扩展方法“RemoveAll”(是否缺少using指令或程序集引用?)
我反复核对了我们的参考资料,他们似乎是匹配的。我引用了System.Linq和EntityFramework。我尝试了清理和重新编译,但这个错误仍然存在。
public void CleanClearinghouse()
{
this.ClearinghousePartners.RemoveAll(
x =>
string.IsNullOrWhiteSpace(x.ClearingHouseName) &&
string.IsNullOrWhiteSpace(x.TradingPartnerName) && !x.StartDate.HasValue);
}
我有一种感觉,我错过了一个程序集引用或类似的东西。我将感谢任何关于在哪里寻找解决方案的提示,但没有修改代码的建议。
2条答案
按热度按时间2guxujil1#
ICollection<T>
确实不包含名为RemoveAll的方法。拥有RemoveAll的类是List<T>
,它可能是变量的实际具体类型。但是,如果属性的类型是ICollection,编译器就无法知道它实际上是一个List。
比如说,像这样:
不会编译,因为
List<string>
被公开为ICollection<string>
。修复它的一种方法是将属性定义更改为
List<T>
而不是ICollection
。gblwokeq2#
由于
ICollection
没有RemoveAll
,如果你想保留已有的代码,一个选择是自己实现RemoveAll
,如下所示:注意:这是一个扩展方法,因此需要放入静态类中。