Вы не можете удалить с помощью foreach, потому что foreach использует ключевое слово yield
, которое не позволяет изменять Почему? .
Ответ maccettura в порядке, но если вы заботитесь о производительности,не используйте LINQ в этом случае, потому что LINQ в основном будет перебирать весь список независимо от того, что , вы просто хотите удалить первое значение, поэтому просто используйте старый стиль - для или во время.Ваш код не подходит, потому что вы используете "==" для сравнения строк.
Ваш код может выглядеть следующим образом:
Решение 1: цикл медленнее, чемследовательно, этот подход для простоты.
List<string> strings = new List<string>() { "A", "B", "C" };
for(int i=0;i<=strings.Count;i++)
{
if (strings[i].Equals("B")) //don't use == to compare string in C#
{
strings.RemoveAt(i);
break;
}
}
Решение 2: лучшая производительность, может быть затруднено
List<string> strings = new List<string>() { "A", "B", "C" };
int deletePosition=0;
bool isFound=false;
foreach(string s in strings)
{
deletePosition++;
if (s.Equals("B")) //don't use "==" to compare string
{
isFound=true;
break;
}
}
if(deletePosition<strings.Count-- && isFound)
{
strings.RemoveAt(deletePosition);
}