Я работаю с приложением C # 2.0, поэтому ответы linq / lambda здесь не помогут.
По сути, я столкнулся с ситуацией, когда мне нужно yield return
объект, но только , если один, если его свойства уникальны (Group By). Например, .. скажем, у меня есть коллекция пользователей, и я хочу сгруппированную коллекцию, основанную на имени (у меня может быть 20 Daves, но я бы хотел видеть только одного в моей коллекции).
Теперь я могу подумать о множестве ситуаций, в которых это может быть полезно, но я не думаю, что это возможно в C # 2.0 без моего явного отслеживания того, что я получаю с другим внутренним списком. Чтобы сделать это без меня, мне нужно иметь доступ к ранее полученному набору, чтобы проверить, существуют ли они.
Я слишком обдумываю это или имеет смысл? Возможно, имеет смысл иметь доступ к yield через интерфейс IEnumerable<T>
, чтобы вы могли сделать что-то вроде этого -
IEnumerable<User> UsersByNameGroup(User userToGroupBy)
{
foreach(User u in Users)
{
if(!yield.Find(delegate(User u){return u.Name == userToGroupBy.Name;})) yield return u;
}
}