首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滤波ICollection

滤波ICollection
EN

Stack Overflow用户
提问于 2013-11-22 23:30:17
回答 2查看 5.1K关注 0票数 2

此代码不起作用,但是:

代码语言:javascript
复制
public virtual ICollection<SomeItem> items { get { return (ICollection<SomeItem>)items.Where(e => e.isVisible == true); } set { ;} }

我想为此做点什么。因此,要获得由集合元素的属性筛选的ICollection,请执行以下操作。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-22 23:34:31

也许你要找的是Extension Method

扩展方法使您能够将方法“添加”到现有类型,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。

代码语言:javascript
复制
public static class ExtensionMethods
{
    public static ICollection<SomeItem> OnlyVisible(this ICollection<SomeItem) items) {
        return items.Where(e => e.isVisible).ToList();
    }
}

请注意,Where返回一个不能修改的IEnumerable,因此我将其称为ToList(),它本质上完成了最后一句中的所有操作。

然后,您可以这样使用它:

代码语言:javascript
复制
void Foo(ICollection<SomeItem> items) {

    foreach (var i in items.OnlyVisible()) {
        // Use i
    }
}
票数 3
EN

Stack Overflow用户

发布于 2013-11-22 23:35:10

尝试:

代码语言:javascript
复制
items.Where(e => e.isVisible == true).ToList()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20156408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档