替换字符串数组中字符串值的C#Lambda表达式

替换字符串数组中字符串值的C#Lambda表达式,c#,.net,lambda,C#,.net,Lambda,我试图使用.net 4.0 lambda方法删除数组中项目周围的双引号(“) 我做错了什么 string[] sa = new string[] { "\"Hello\"", "\"Goodbye\"", "\"Moshi\"", "\"Adios\"" }; // Trying to replace the Array.ForEach(sa, s => s.Replace("\"", "")); // Doesn't remove the quotes surrounding the

我试图使用.net 4.0 lambda方法删除数组中项目周围的双引号(“)

我做错了什么

string[] sa = new string[] { "\"Hello\"", "\"Goodbye\"", "\"Moshi\"", "\"Adios\"" };

// Trying to replace the 
Array.ForEach(sa, s => s.Replace("\"", "")); // Doesn't remove the quotes surrounding the string "Hello".
foreach(var s in sa)
   Console.WriteLine(s);

这仍然不能消除“围绕项”的问题。

没有lambda表达式可以插入到
ForEach
中以实现您的目标,因为lambda可以执行的操作对元素没有写访问权限,并且
字符串本身是不可变的

您可以做的是替换整个阵列,如下所示:

sa = sa.Select(s => s.Replace("\"", "")).ToArray();
这种方法很有效,因为它将整个
sa
数组替换为基于
sa
元素的新创建数组。

您可以使用Linq:

sa = sa.Select(s => s.Replace("\"", "")).ToArray();
或用于循环:

for (var i = 0; i < sa.Length; i++)
    {
        sa[i] = sa[i].Replace("\"", "");
    }
for(变量i=0;i
其他答案是,如果您希望从对其项执行的某些处理中获得一个新数组,您应该做什么

但是,如果您不需要(需要一个新的数组),并且希望对数组的每个项执行一次检查(这就是所做的),则可以执行以下操作:

//This is pretty much what your code is trying to do
Array.ForEach(sa, i => Console.WriteLine(i.Replace("\"", "")));