c # string.replace в цикле foreach - PullRequest
       11

c # string.replace в цикле foreach

13 голосов
/ 26 апреля 2010

Каким-то образом я не могу заставить работать замену строки в цикле foreach в C #. Мой код выглядит следующим образом:

foreach (string s in names)
{
    s.Replace("pdf", "txt");
}

Я все еще новичок в LINQ, так что извините, если это звучит любительски;)

Ответы [ 5 ]

32 голосов
/ 26 апреля 2010

Вы говорите, что ищете решение LINQ ... это просто:

var replacedNames = names.Select(x => x.Replace("pdf", "txt"));

Мы не знаем тип names, но если вы хотите назначить его обратно, вы можете использовать ToArray или ToList:

// If names is a List<T>
names = names.Select(x => x.Replace("pdf", "txt")).ToList();
// If names is an array
names = names.Select(x => x.Replace("pdf", "txt")).ToArray();

Вы должны знать, что код, который вы разместили, на данный момент не использует LINQ вообще ...

23 голосов
/ 26 апреля 2010

Строки в C # являются неизменяемыми (не изменяется), поэтому s.Replace вернет новую строку. К сожалению, это означает, что вы не можете использовать foreach для обновления. Если names является массивом, это должно работать:

for(int i = 0; i < names.Length; i++)
{
    names[i] = names[i].Replace("pdf", "txt");
}
3 голосов
/ 26 апреля 2010

Как уже упоминали другие, вам нужно использовать цикл for, чтобы сделать это на месте. Однако, если вам не требуется, чтобы операция выполнялась на месте (то есть результаты могут быть другой коллекцией), то вы также можете сделать это как запрос linq, например,

var results = from name in names select name.Replace("pdf", "txt");

Хотя одна вещь - похоже, вы пытаетесь изменить расширение некоторых имен файлов. Если это то, что вы пытаетесь сделать, то я бы порекомендовал Path.ChangeExtension, который специально разработан для этой цели.

var results = from name in names select Path.ChangeExtension(name, "txt");
0 голосов
/ 26 апреля 2010

Зачем использовать замену, это замедлит работу приложения. Используйте регулярное выражение:

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace.aspx

0 голосов
/ 26 апреля 2010

s.Replace является функцией, поэтому вы хотели бы s = s.Replace () .. хотя лучше использовать StringBuilder. (см. верхний ответ)

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