рассмотрим следующий пример:Проблемное поведение Linq Union?
public IEnumerable<String> Test()
{
IEnumerable<String> lexicalStrings = new List<String> { "test", "t" };
IEnumerable<String> allLexicals = new List<String> { "test", "Test", "T", "t" };
IEnumerable<String> lexicals = new List<String>();
foreach (String s in lexicalStrings)
lexicals = lexicals.Union (allLexicals.Where (lexical => lexical == s));
return lexicals;
}
Я надеялся, что производить «тест», «т» в качестве выходного сигнала, но это не делает (Выход только «т»). Я не уверен, но, возможно, придется что-то сделать с отложенной обработкой. Любые идеи, как заставить это работать или для хорошей альтернативы?
Редактировать: Обратите внимание, что это просто упрощенный пример. lexicalStrings
и allLexicals
- это разные типы в исходном коде. Поэтому я не могу их напрямую комбинировать.
Edit2 проблема решить выглядит примерно так:
public IEnumerable<Lexical> Test()
{
IEnumerable<String> lexicalStrings = new List<String> { "test", "t" };
IEnumerable<Lexical> allLexicals = new List<Lexical> { ... };
IEnumerable<Lexical> lexicals = new List<Lexical>();
foreach (String s in lexicalStrings)
lexicals = lexicals.Union (allLexicals.Where (lexical => lexical.Text == s));
return lexicals;
}
Спасибо за объяснение и легко исправить! Вверх и ответили. – Foxfire
Я думал об использовании AddRange, но это приводит к дублированию в списке (который следует избегать автоматически). – Foxfire
@Foxfire вы действительно должны использовать intersect, он решает проблему – Andrey