我想使用removeAll方法删除observableCollection中的项目。代码是:
public static class ExtensionMethods
{
public static int Remove<T>(
this ObservableCollection<T> coll, Func<T, bool> condition)
{
var itemsToRemove = coll.Where(condition).ToList();
foreach (var itemToRemove in itemsToRemove)
{
coll.Remove(itemToRemove);
}
return itemsToRemove.Count;
}
}
我有我的主项目,我创建了一个新的DLL项目,其中包含与集合相关的实用程序,因此我在第二个项目中创建了一个具有此代码的类。
但是,我没有为observableCollection提供RemoveAll方法,我的意思是:
ObservableCollection<MyType> o = new ObservableCollection<MyType>();
o.RemoveAll ??
不可用。我在我的主项目中添加了一个新的引用到第二个项目,我包括了库的使用。
如果在我的主项目中我创建了一个类,那么该方法可用。但我希望有一个带有这种扩展方法的库,可以将这些方法用于另一个项目,而不是在每个项目中添加一个新类。
答案 0 :(得分:2)
问题是您没有实施RemoveAll
方法,而是采用Remove<T>
方法。
public static int Remove<T>(this ObservableCollection<T> coll, Func<T, bool> condition)
也许你宣布这样......?
public static int RemoveAll<T>(this ObservableCollection<T> coll, Func<T, bool> condition)
此外,当然您必须在原始项目中引用DLL并包含命名空间。
令我感到有趣的是,当您将班级名称从ExtensionMethods
更改为ObservableCollection
时,您说它有效。您是否意外创建了一个名为ObservableCollection
的班级,该班级现在与System.Collections.Generic.ObservableCollection
发生冲突?
答案 1 :(得分:0)
您必须使用“using”关键字包含命名空间。 例如:
using System.Collections.Generic;
using System.Linq;