如何将扩展方法放在库中?

时间:2014-07-01 10:46:38

标签: c# extension-methods projects-and-solutions

我想使用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 ??

不可用。我在我的主项目中添加了一个新的引用到第二个项目,我包括了库的使用。

如果在我的主项目中我创建了一个类,那么该方法可用。但我希望有一个带有这种扩展方法的库,可以将这些方法用于另一个项目,而不是在每个项目中添加一个新类。

2 个答案:

答案 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;
相关问题