【问题标题】:List<string> emailAddress how to replace value in a particular stringList<string> emailAddress 如何替换特定字符串中的值
【发布时间】:2013-09-27 14:18:06
【问题描述】:

我有以下方法

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

但是电子邮件字符串没有替换“;”与“,”。我错过了什么?

【问题讨论】:

    标签: c#


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      您还可以使用 for 循环来修改键盘 P 在 his answer 上解释的现有列表。

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

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

      【讨论】:

      • Soner,你不能修改foreach中的迭代变量Cannot assign to 'email' because it is a 'foreach iteration variable'
      • @Habib Arrrhghhhhh!骗我:) 更新。我觉得现在可以了。
      • 看起来不错,但您可以使用简单的for 循环并修改现有列表而不是创建新列表
      • @Habib 你是对的。我引用了keyboardP's answer,这是一个很好的例子,如何使用for 循环来完成。
      【解决方案3】:

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

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

      记得使用System.Linq;

      【讨论】:

      • 这就是我的选择----
      【解决方案4】:

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

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

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

      【讨论】:

      • +1 因为没有像我一样陷入foreach 的陷阱:)
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2011-04-12
        • 1970-01-01
        • 1970-01-01
        • 2016-06-20
        • 1970-01-01
        • 1970-01-01
        • 2011-01-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多