过滤ICollection

时间:2013-11-22 23:30:18

标签: c# icollection

此代码不起作用,但是:

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

我想做点什么。所以要通过集合元素的属性来过滤ICollection。

当然,我可以遍历这些元素,并获得正确的元素,将它们放入一个新的集合中然后返回,但是有更好的解决方案吗?

2 个答案:

答案 0 :(得分: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 :(得分:1)

尝试:

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