public void CalculateAndUpdateWordCount(string text) { var words = textSplitter.SanitizeAndSplitIntoWords(text); var wordCount = wordCounter.CountWords(words); foreach (var kvp in wordCount) { var existingWord = countedWords.SingleOrDefault(cw => cw.Word.Equals(kvp.Key)); if (existingWord == null) { existingWord = new CountedWord { Word = kvp.Key, Count = kvp.Value }; countedWords.Add(existingWord); } else { existingWord.Count += kvp.Value; } bool isPrime; if (!primeCheckResults.TryGetValue(existingWord.Count, out isPrime)) { isPrime = primeChecker.IsPrime(existingWord.Count); primeCheckResults[existingWord.Count] = isPrime; } existingWord.IsPrime = isPrime; } }