Instruments
содержит коллекцию string
или слов.Ваш .ForEach
выполняет итерацию по этой коллекции, где каждый экземпляр равен w
, но вы не влияете на эти экземпляры, используя здесь .Replace
, вы используете их в операции для воздействия на строку vowels
.
см. String.Replace Документация MSN.
Таким образом, вам также необходимо выполнить итерацию по vowels
string
и использовать char
экземпляр vowels
: w.Replace(v, " ")
, где w
- это ваш экземпляр слова в Instruments
, а v
- ваш экземпляр гласного в vowels
:
Итак, это должно быть Instruments.ForEach(w => foreach (vowelChar in vowels.split(" ")) { w.Replace(vowelChar, " "); });
Примечание: @mjwills указал на другую проблему с этой операцией в комментариях.присвоение w
не будет сохраняться здесь.поэтому вам нужно каким-то образом создать новый List<string>
, чтобы сохранить его (либо объявить его заранее и добавить к нему в итерации, либо использовать Linq .ToList<T>
расширение IEnumerable<T>
.
Однако это неэффективно, поскольку вы по сути создаете char[]
из vowels
string
, используя .Split
на каждой итерации Instruments
.
Вместо этого вы должны определить свой vowels
как char[]
, чтобы избежать необходимости этой операции: var vowels = new char[] {'a','e','i','o','u', 'y'};
List<string> Instruments = new List<string>();
Instruments.Add("cello");
Instruments.Add("guitar");
Instruments.Add("violin");
Instruments.Add("double bass");
char[] vowels = new char[] {'a','e','i','o','u','y'};
Instruments.ForEach(w => {
foreach (char v in vowels) {
w = w.Replace(v, ' ');
}
});
РЕДАКТИРОВАТЬ: назначение w
экземпляров Instruments
в итерации не сохраняется, поэтомувам нужно создать новый экземпляр List<string>
для ваших результатов.
List<string> results = new List<string>();
Instruments.ForEach(w => {
foreach (char v in vowels) {
results.Add(w.Replace(v, ' '));
}
});
results.ForEach(w => Console.WriteLine(w));