私は C# 2.0 アプリを使用しているため、linq/lambda の回答はここでは役に立ちません。
yield return
基本的に、オブジェクトが必要な状況に直面していますが、プロパティが一意である場合 (Group By)のみです。たとえば、ユーザーのコレクションがあり、名前に基づいてグループ化されたコレクションが必要だとします (20 人の Dave がいるかもしれませんが、コレクションには 1 つだけ表示したい)。
これが役立つ状況をたくさん思いつくことができますが、C# 2.0 では、別の内部リストで何を生成しているかを明示的に追跡しない限り、これは不可能だと思います。せずにそれを行うには、以前に生成されたセットにアクセスして、それらが存在するかどうかを確認する必要があります。
私はこれを考えすぎていますか、それとも理にかなっていますか? おそらく、IEnumerable<T>
インターフェイスを介してyieldにアクセスすることは理にかなっているので、次のようなことができるでしょう-
IEnumerable<User> UsersByNameGroup(User userToGroupBy)
{
foreach(User u in Users)
{
if(!yield.Find(delegate(User u){return u.Name == userToGroupBy.Name;})) yield return u;
}
}