Используйте HashSet<string>
Этот класс похож на список, но не допускает дублирования
IList<string> animals = new List<string> {"Lion", "Wolf", "Tiger", "Dog", "Cat", "Lion", "Tiger"};
HashSet<string> uniques = new HashSet<string>(animals);
foreach(animal in uniques)
Console.WriteLIne(animal);
Если вы хотите использовать al oop, вы можете упростить свой код используя второй список, в котором вы будете хранить уникальные значения, и в то же время вы можете избежать ложной уникальности, когда единственное различие - это регистр в названии животного сверху или снизу
IList<string> animals = new List<string> {"Lion", "Wolf", "Tiger", "Dog", "Cat", "Lion", "tiger"};
List<string> uniques = new List<string>();
foreach (string animal in animals)
{
if (!SearchCaseInsensitive(uniques, animal))
uniques.Add(animal);
}
foreach(string animal in uniques)
Console.WriteLine(animal);
bool SearchCaseInsensitive(List<string> source, string search)
{
string lowerCaseSearch = search.ToLower();
foreach(string animal in source)
if(animal.ToLower() == lowerCaseSearch)
return true;
return false;
}