C# 列表<;字符串>;emailAddress如何替换特定字符串中的值

C# 列表<;字符串>;emailAddress如何替换特定字符串中的值,c#,C#,我有以下方法 /// <summary> /// Replaces SemiColons with commas because SMTP client does not accept semi colons /// </summary> /// <param name="emailAddresses"></param> public static List<string> ReplaceSemiColo

我有以下方法

/// <summary>
    /// Replaces SemiColons with commas because SMTP client does not accept semi colons
    /// </summary>
    /// <param name="emailAddresses"></param>
    public static List<string> ReplaceSemiColon(List<string> emailAddresses) // Note only one string in the list...
    {         
        foreach (string email in emailAddresses)
        {
            email.Replace(";", ",");
        }

        //emailAddresses.Select(x => x.Replace(";", ","));  // Not working either


        return emailAddresses;
    }
//
///将分号替换为逗号,因为SMTP客户端不接受分号
/// 
/// 
公共静态列表替换分号(列出电子邮件地址)//注意列表中只有一个字符串。。。
{         
foreach(电子邮件地址中的字符串电子邮件)
{
电子邮件。替换(“;”,“,”);
}
//emailAddresses.Select(x=>x.Replace(“;”,“,”);//也不工作
返回电子邮件地址;
}

但是,电子邮件字符串并没有将“;”替换为“,”。我缺少什么?

我想你应该试着把它设置回自己的状态
email=email.Replace(“;”,“,”)

我认为您应该尝试将其设置回自身
email=email.Replace(“;”,“,”)

方法返回新字符串。它不会改变现有的

返回一个新字符串,其中包含指定Unicode的所有匹配项 当前字符串中的一个或多个字符将替换为另一个 指定的Unicode字符或字符串

作为Habib,对当前列表使用
foreach
,会得到foreach迭代变量错误。这是一个只读迭代。创建一个新列表,然后向其中添加替换的值

您还可以使用for循环来修改keyboardP解释的现有列表

List newemailAddresses=new List();
foreach(电子邮件地址中的字符串电子邮件)
{         
newemailAddresses.Add(email.Replace(“;”,“,”);
}
返回新的电子邮件地址;
请注意,由于字符串是空的,因此无法更改它们。即使您认为您更改了它们,您实际上也创建了新字符串对象。

方法返回新字符串。它不会改变现有的

返回一个新字符串,其中包含指定Unicode的所有匹配项 当前字符串中的一个或多个字符将替换为另一个 指定的Unicode字符或字符串

作为Habib,对当前列表使用
foreach
,会得到foreach迭代变量错误。这是一个只读迭代。创建一个新列表,然后向其中添加替换的值

您还可以使用for循环来修改keyboardP解释的现有列表

List newemailAddresses=new List();
foreach(电子邮件地址中的字符串电子邮件)
{         
newemailAddresses.Add(email.Replace(“;”,“,”);
}
返回新的电子邮件地址;

请注意,由于字符串是空的,因此无法更改它们。即使您认为您更改了字符串,您实际上也创建了新的字符串对象。

字符串是不可变的,因此会返回另一个字符串。试一试

for(int i = 0; i < emailAddress.Count; i++)
{
   emailAddress[i] = emailAddress[i].Replace(";", ",");
}
for(int i=0;i

foreach循环不会在这里编译,因为您正在尝试更改迭代变量。您会遇到。

字符串是不可变的,因此会返回另一个字符串。试一试

for(int i = 0; i < emailAddress.Count; i++)
{
   emailAddress[i] = emailAddress[i].Replace(";", ",");
}
for(int i=0;i

foreach循环不会在这里编译,因为您正在尝试更改迭代变量。您会遇到。

您应该使用以下内容: var tmpList=新列表(); 将每个修改后的电子邮件地址添加到tmplist 完成后,返回TmpList。
在.NET中,字符串是不可变的,这就是代码不起作用的原因。

您应该使用以下内容: var tmpList=新列表(); 将每个修改后的电子邮件地址添加到tmplist 完成后,返回TmpList。
在.NET中,字符串是不可变的,这就是代码不起作用的原因。

正如其他人已经提到的,字符串是(
string.Replace
将返回一个新字符串,它不会修改现有字符串),并且不能修改
foreach
循环中的列表。您可以使用
for
循环修改现有列表,也可以使用LINQ创建新列表并将其分配回现有列表。比如:

emailAddresses = emailAddresses.Select(r => r.Replace(";", ",")).ToList();

记住包括使用
System.Linq

正如其他人已经提到的,字符串是(
string.Replace
将返回一个新字符串,它不会修改现有字符串),并且您不能在
foreach
循环中修改列表。您可以使用
for
循环修改现有列表,也可以使用LINQ创建新列表并将其分配回现有列表。比如:

emailAddresses = emailAddresses.Select(r => r.Replace(";", ",")).ToList();

记住包括使用
System.Linq

Soner,您不能修改foreach中的迭代变量
不能分配给“email”,因为它是“foreach迭代变量”
@Habib arrrhhhh!愚弄我
:)
更新。我认为现在可以了。它看起来不错,但您可以使用一个简单的
for
循环,修改现有列表,而不是创建新列表one@Habib你是对的。我引用了一个很好的例子,说明如何使用
for
循环来完成。因此,您不能修改foreach中的迭代变量
不能分配给“email”,因为它是一个“foreach迭代变量”
@Habib arrhghhh!愚弄我
:)
更新。我认为现在可以了。它看起来不错,但您可以使用一个简单的
for
循环,修改现有列表,而不是创建新列表one@Habib你是对的。我引用了一个很好的例子来说明如何使用
进行
循环。
+1
用于避免落入
foreach
的陷阱,比如我
:)
+1
用于避免落入
foreach
的陷阱,比如我
:)
这就是我所做的——这就是我所做的----