Перепишу сюда так чтобы из глаз не текла кровь:
var wordOccurrences = new Dictionary<string, int>();
foreach (var word in filteredWords.Select(x => x.ToLower())
{
if(wordOccurrences.ContainsKey(word))
{
wordOccurrences[word] = wordOccurrences[word] + 1;
continue;
}
wordOccurrences[word] = 1;
}
return wordOccurrences;
Максимум ток Select. Предполагая что filteredWords это список или массив string. По определению задачи: если в фильтрованном списке со словами есть слово которое есть в словаре, мы увеличиваем значение по ключу на единицу (по умолчанию 0). Если слово не встречается в словаре, то устанавливаем в счётчик 1. Очевидно, что задача не решение проблемы, это просто задача по приколу. По моему, лучше всего читается то что я выше написал, linq тут реально только усложнит, использование метода ForEach читается хуже чем цикл foreach в ситуации условной логики. Чтобы не вступать с преподом в конфликт можно сунуть ему вот это:
var wordOccurrences = new Dictionary<string, int>();
var filteredLower = filteredWords.Select(x => x.ToLower());
// Преполагаем что не встречающиеся слова в словаре имеют значение 1
// На этом этапе предположим что все слова - не встречающиеся
foreach (var word in wordOccurrences.Keys)
{
wordOccurrences[word] = 1;
}
foreach (var word in filteredLower.Where(x => wordOccurrences.ContainsKey(x)))
{
// Те слова, что всё таки встречаются мы начинаем инкрементить
// Однако счёт не начинается с единицы по определению задачи, поэтому пропускаем первое увеличение
if(wordOccurrences[word] == 1)
continue;
wordOccurrences[word]++;
}
return wordOccurrences;