Chcę filtrować tablicę ciągów:Modyfikowanie elementów w liście z ForEach lambda
string[] args
z wiersza poleceń, np: "-command1 xy -command2 ab -command3 cd"
uwzględnieniem wszystkich słowa z "-" na początku, a następnie przekształcanie ich na wielkie litery.
var commands = args.Where(x => x.StartsWith("-")).ToList<String>();
commands.ForEach(x => {
x.ToUpper()
});
commands.ToString();
Spowoduje to wyświetlenie listy argumentów za pomocą słów rozpoczynających się od "-" małych liter - to znaczy, że lambda nie jest stosowana. Dlaczego to? Czy jest tworzona kopia listy do przechwytywania lambda, która jest modyfikowana, a nie sama lista źródeł?
1. Nie jesteś ustawienie 'x.ToUpper()' do niczego. 2. Ale nawet gdybyś to zrobił, to by się nie skompilował: ciągi są niezmienne. Powinieneś to zrobić: 'var commands = args.Where (x => x.StartsWith (" - ")) Wybierz (x => x.ToUpper()). ToList();' – Rob