Вы уже упоминали, что у вас есть собственная коллекция, вероятно, полученная из списка, верно?Затем вам нужно будет создать свой собственный метод для поиска:
public class MyList<T> : System.Collections.Generic.List<T>
{
public IEnumerable<T> MyFind(Predicate<T> match)
{
return this.Where(x => x.CanSeeThis).ToList().Find(match);
}
}
К сожалению, это необходимо, потому что вы не можете переопределить метод Find в List напрямую.Однако вы можете использовать ключевое слово 'new', чтобы указать, что если вы получили ссылку на экземпляр MyList, он будет использовать эту реализацию find, как показано ниже:
public new IEnumerable<T> Find(Predicate<T> match)
{
return this.Where(x => x.CanSeeThis).ToList().Find(match);
}
Однако приведенный выше пример даст:
MyCollection<int> collection = new ...
collection.Find(myPredicate); // <= Will use YOUR Find-method
List<int> baseTypeCollection = collection; // The above instantiated
baseTypeCollection.Find(myPredicate); // Will use List<T>.Find!
Так что лучше сделать свой собственный метод.