Вы проверяете, является ли результат IndexOf большим или равным 0, что означает, начинается ли совпадение в любом месте в строке. Попробуйте проверить, равно ли оно равно 0:
if (testList.FindAll(x => x.IndexOf(keyword,
StringComparison.OrdinalIgnoreCase) >= 0).Count > 0)
Console.WriteLine("Found in list");
Теперь "коза" и "овес" не будут совпадать, но "коза" и "коза" будут совпадать. Чтобы избежать этого, вы можете сравнить длины двух строк.
Чтобы избежать всех этих сложностей, вы можете использовать словарь вместо списка. Их ключ будет строчной строкой, а значение будет реальной строкой. Таким образом, производительность не пострадает, потому что вам не нужно использовать ToLower
для каждого сравнения, но вы все равно можете использовать Contains
.