c#更改foreach字符串循环中的字符串

c#更改foreach字符串循环中的字符串,c#,C#,我试图用foreach循环遍历列表中的字符串,但我不知道如何更改被引用的项-如何更改列表中的s。。。e、 g.下面我想在myStringList foreach(string s in myStringList) { s = s + "-"; } 我不能对s做任何事情,因为它是一个“foreach迭代变量”——所以我可以在循环过程中不更改它吗 我必须使用int进行计数吗 我相信有一种更简单的方法…使用Linq可以很容易地做到这一点: var newStringList = myStr

我试图用foreach循环遍历列表中的字符串,但我不知道如何更改被引用的项-如何更改列表中的
s
。。。e、 g.下面我想在
myStringList

foreach(string s in myStringList)
{
    s = s + "-"; 
}
我不能对s做任何事情,因为它是一个“foreach迭代变量”——所以我可以在循环过程中不更改它吗

我必须使用
int
进行计数吗


我相信有一种更简单的方法…

使用Linq可以很容易地做到这一点:

var newStringList = myStringList
    .Select(s => s + "-")
    .ToList();
如果确实要修改现有列表,可以使用经典的
for
循环,例如:

for (var i = 0; i < myStringList.Count; i++)
{
    myStringList[i] = myStringList[i] + "-";
}
for(变量i=0;i
试试这个

List<string> listString = new List<string>() { "1","2","3"};
listString=listString.Select(x => x + "-").ToList();
List listString=new List(){“1”、“2”、“3”};
listString=listString.Select(x=>x+“-”).ToList();

您是否考虑过对
循环使用
<代码>myStringList[i]+=“-”另一种方法是使用LINQ表达式,我已经有了,但我真的认为会有一个非常简单的“ref”关键字,在我循环时直接插入并更改
s
,使用
s.replace
s=s+x
诸如此类的东西。在
foreach
中迭代时不能更改值-您必须使用linq来更改它们,或者将(更新的)值复制到一个新的集合。我认为这可能与
之类的字符串函数一起工作。选择(s=>s.replace("-",""))
是的,您正在创建新字符串并将结果分配给一个全新的列表。请记住,
string
在C#中是不可变的,所以您永远不能更改它,只能创建新的。当您说关键字时,会很有趣,有些东西会点击。不可变!我同意您的看法。LINQ解决方案的一个潜在问题是,因为已经创建了一个全新的列表例如,对旧列表的任何引用都看不到更改。如果这是对列表的唯一引用,则这可能不是问题。@mjwills如果您确实(不太可能)想介绍这种情况,可以
var copy=list.Select(s=>s+“-”).ToList();list.Clear();list.AddRange(copy)
我10分钟前发布了基本相同的解决方案,您的解决方案有什么不同?