List <string> emailAddress如何替换特定字符串中的值</string>

时间:2013-09-27 14:18:07

标签: c#

我有以下方法

/// <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;
    }

但是,电子邮件字符串并未替换“;”用“,”。我错过了什么?

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

String.Replace方法返回 new 字符串。它不会改变现有的。

  

返回一个新字符串,其中所有出现的指定Unicode   当前字符串中的字符或字符串将替换为另一个字符串   指定的Unicode字符或字符串。

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

此外,您可以使用for循环来修改keyboardP在his answer上解释的现有列表。

List<string> newemailAddresses = new List<string>();
foreach (string email in emailAddresses)
{         
     newemailAddresses.Add(email.Replace(";", ","));
}
return newemailAddresses;

请注意,因为字符串是 immutable types ,所以您无法更改它们。即使你认为你改变它们,你实际上也会创建新的字符串对象。

答案 2 :(得分:4)

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

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

请务必使用System.Linq;

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:0)

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