列表<字符串>电子邮件地址如何替换特定字符串中的值
本文关键字:字符串 替换 电子邮件地址 列表 何替换 | 更新日期: 2023-09-27 18:32:59
我有以下方法
/// <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;
}
但是,电子邮件字符串不会将";"替换为","。 我错过了什么?
我认为您应该尝试将其设置回自身email = email.Replace(";", ",");
String.Replace
方法返回新字符串。它不会改变现有的。
返回一个新字符串,其中指定 Unicode 的所有匹配项 当前字符串中的字符或字符串将替换为另一个 指定的 Unicode 字符或字符串。
正如 Habib 所提到的,将foreach
与当前列表一起使用会得到一个 foreach 迭代变量错误。它是只读迭代。创建一个新列表,然后改为向其添加替换值。
您也可以使用 for 循环来修改键盘 P 在他的答案中解释的现有列表。
List<string> newemailAddresses = new List<string>();
foreach (string email in emailAddresses)
{
newemailAddresses.Add(email.Replace(";", ","));
}
return newemailAddresses;
请注意,由于字符串是不可变的类型,因此无法更改它们。即使您认为您更改了它们,您实际上也会创建新的字符串对象。
正如其他人已经提到的那样,字符串是不可变的(string.Replace
会返回一个新字符串,它不会修改现有的字符串),并且您不能在foreach
循环中修改列表。可以使用 for
循环修改现有列表,也可以使用 LINQ 创建新列表并将其分配回现有列表。喜欢:
emailAddresses = emailAddresses.Select(r => r.Replace(";", ",")).ToList();
请记住包括使用System.Linq;
字符串是不可变的,因此返回另一个字符串。尝试
for(int i = 0; i < emailAddress.Count; i++)
{
emailAddress[i] = emailAddress[i].Replace(";", ",");
}
foreach 循环不会在此处编译,因为您正在尝试更改迭代变量。你会遇到这个问题。
你应该使用类似的东西:var tmpList = new List();将每个修改后的电子邮件地址添加到 TMPlist完成后,返回 TmpList。在 .NET 中,字符串是不可变的,这就是代码不起作用的原因。