2013-11-22 3 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

Try:

items.Where(e => e.isVisible == true).ToList() 
Смежные вопросы