あなたはすでにリストから派生した独自のコレクションを持っていると言いましたよね? 次に、以下を見つけるための独自の方法を作成する必要があります。
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);
}
}
残念ながら、List の Find メソッドを直接オーバーライドできないため、これが必要になります。ただし、「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!
だから、独自の方法を作るほうがいいです。