2014-07-01 42 views
0

我想要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

它應該是絕對好的。你是否肯定*你已經包含了相關的'using'指令?如果你輸入'ExtensionMethods.',Intellisense會彈出'Remove'方法嗎? (請注意,您尚未聲明'RemoveAll'方法;您已聲明瞭'Remove'方法。) –

+0

是true,但這不是問題。問題是靜態類的名稱。如果我將ExtensionMethods更改爲ObservableCollection,那麼我可以使用該方法。 –

+1

@ÁlvaroGarcía我真的懷疑,因爲該方法沒有命名爲'RemoveAll',而是'Remove'。看到我的答案。 –

回答

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衝突?

+0

我也很驚訝,與名字沒有衝突。首先,我爲此使用了不同的名稱,但我試圖更改名稱並且沒有問題。 –

0

您必須在「using」關鍵字中包含名稱空間。 例如:

using System.Collections.Generic; 
using System.Linq; 
+1

OP已經表示他有_「包括[d]圖書館的使用」_。所以你的回答沒有提供OP不知道的東西。我建議你更清楚地說明*要導入哪個*命名空間。 – stakx