foreach循环中的c#string.replace

不知何故,我似乎无法在C#的foreach循环中获得字符串替换。 我的代码如下:

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

对于LINQ来说还是很新的,所以请原谅我,如果这听起来很业余;)

你说你正在使用LINQ解决方案……这很简单:

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

我们不知道names的类型,但是如果要分配回names ,则可能使用ToArrayToList

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

你应该知道你发布的代码目前根本没有使用LINQ …

C#中的字符串是不可变的(不会更改),因此s.Replace将返回一个新字符串。 不幸的是,这意味着您无法使用foreach进行更新。 如果names是一个数组,这应该工作:

 for(int i = 0; i < names.Length; i++) { names[i] = names[i].Replace("pdf", "txt"); } 

正如其他人提到的那样,你需要使用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"); 

s.Replace是一个函数,所以你想要s = s.Replace()..虽然最好使用StringBuilder。 (见上面的答案)

为什么要使用replace,这会使应用程序变慢。 使用正则表达式:

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