2013-11-22 32 views
2

此代碼不能正常工作,但是:過濾ICollection的

public virtual ICollection<SomeItem> items { get { return (ICollection<SomeItem>)items.Where(e => e.isVisible == true); } set { ;} } 

我想要做類似的意思。因此,要獲取由集合元素的屬性過濾的ICollection。

當然,我可以遍歷元素,並得到正確的,把它們放入一個新的集合,並返回,但有沒有更好的解決方案?

+0

什麼錯誤信息,你得到什麼? –

+0

爲什麼它不起作用?什麼'項目是? –

+2

你想使用一個屬性?這會給你着名的'StackOverFlow'異常。 –

回答

3

也許你在找什麼是Extension Method

擴展方法使您能夠將方法「添加」到現有類型中,而無需創建新的派生類型,重新編譯或以其他方式修改原始類型。

public static class ExtensionMethods 
{ 
    public static ICollection<SomeItem> OnlyVisible(this ICollection<SomeItem) items) { 
     return items.Where(e => e.isVisible).ToList(); 
    } 
} 

注意Where返回IEnumerable,你不能修改,所以我稱之爲ToList()基本上不會在你的最後一句話一切。

你會再使用這樣的:

void Foo(ICollection<SomeItem> items) { 

    foreach (var i in items.OnlyVisible()) { 
     // Use i 
    } 
} 
1

嘗試:

items.Where(e => e.isVisible == true).ToList()