Что не так с этим циклом ForEach? - PullRequest
1 голос
/ 09 июля 2010

Да ... это один из тех дней.

public string TagsInput { get; set; }

//further down
var tagList = TagsInput.Split(Resources.GlobalResources.TagSeparator.ToCharArray()).ToList();
tagList.ForEach(tag => tag.Trim()); //trim each list item for spaces
tagList.ForEach(tag => tag.Replace(" ", "_")); //replace remaining inner word spacings with _

Оба цикла ForEach не работают.tagList - это просто список.

Спасибо!

Ответы [ 5 ]

5 голосов
/ 09 июля 2010

Trim() и Replace() не изменяют строку, к которой они обращаются. Они создают новую строку, к которой применено действие.

Вы хотите использовать Select, а не ForEach.

tagList = tagList.Select(t => t.Trim()).Select(t => t.Replace(" ", "_")).ToList();
2 голосов
/ 09 июля 2010

Именно поэтому Microsoft не внедрила ForEach в IEnumerable.Что с этим не так?

public string[] TagsInput { get; set; }

//further down
var adjustedTags = new List<string>();
foreach (var tag in TagsInput.Split(Resources.GlobalResources.TagSeparator.ToCharArray()))
{
    adjustedTags.Add(tag.Trim().Replace(" ", "_"));
}

TagsInput = adjustedTags.ToArray();
2 голосов
/ 09 июля 2010

Причина в том, что строка неизменна.Таким образом, результат каждой функции Trim () или Replac () создаст новую строку.Вам нужно переназначить исходный элемент, чтобы увидеть обновленное значение.

2 голосов
/ 09 июля 2010

ForEach (и другие методы "linq") не изменяют экземпляр списка.

tagList = tagList.Select(tag => tag.Trim().Replace(" ", "_")).ToList();
1 голос
/ 09 июля 2010

Если не работает, вы имеете в виду, что они на самом деле ничего не делают, я думаю, вам нужно немного изменить свой код:

public string TagsInput { get; set; }

//further down
var tagList = TagsInput.Split(Resources.GlobalResources.TagSeparator.ToCharArray()).ToList();
tagList.ForEach(tag => tag = tag.Trim()); //trim each list item for spaces
tagList.ForEach(tag => tag = tag.Replace(" ", "_")); //replace remaining inner word spacings with _

Trim и Replace не изменяют значение строки, они возвращают новое строковое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...