ОК, я вижу мое императивное решение не вызывает никакой любви, поэтому вот решение LINQ, которое, вероятно, менее эффективно, но все же избегает поиска по списку два раза (что является проблемой в принят ответ):
var all = new List<string>(new [] { "aaa", "BBB", "Something", "ccc" });
const string temp = "something";
var found = all
.Select((element, index) => new {element, index})
.FirstOrDefault(pair => StringComparer.InvariantCultureIgnoreCase.Equals(temp, pair.element));
if (found != null)
all.RemoveAt(found.index);
Вы также можете сделать это (что, вероятно, более производительно, чем выше, поскольку оно не создает новый объект для каждого элемента):
var index = all
.TakeWhile(element => !StringComparer.InvariantCultureIgnoreCase.Equals(temp, element))
.Count();
if (index < all.Count)
all.RemoveAt(index);