技术使用。
问题。
我有List<User>
,其中包含电子邮件属性。我想小写列表中的所有电子邮件地址,但我的实现不起作用。我使用以下声明:
emails.ToList().ForEach(e => e.ToLower());
对于 Catherine.Burke@email.co.uk 这样的电子邮件地址,这根本不起作用。我构建了以下内容来测试它:
string email = "Catherine.Burke@email.co.uk";
email = email.ToLower();
Console.WriteLine("Email: " + email);
string email2 = "Catherine.Burke@email.co.uk";
string email3 = "Gareth.bradley@email.co.uk";
List<string> emails = new List<string>();
emails.Add(email2);
emails.Add(email3);
emails.ToList().ForEach(e => e.ToLower());
emails.ToList().ForEach(delegate(string e)
{
Console.WriteLine("ForEach deletegate : " + e);
});
List<EmailAddress> emailAddresses = new List<EmailAddress>();
emailAddresses.Add(new EmailAddress { FullAddress = "Catherine.Burke@email.co.uk" });
emailAddresses.Add(new EmailAddress { FullAddress = "Gareth.bradley@email.co.uk" });
emailAddresses.ToList().ForEach(e => e.FullAddress.ToLower());
emailAddresses.ToList().ForEach(delegate(EmailAddress e)
{
Console.WriteLine("EmailAddress delegate: " + e.FullAddress);
});
foreach (EmailAddress em in emailAddresses)
{
Console.WriteLine("Foreach Print: " + em.FullAddress);
}
现在我认为它可能是文化,因为它们是名称,它使它们保持大写,但当我在单个字符串上使用ToLower()
时它起作用了。以上输出使用以下输出,因为您可以看到第1行显示带有小写字符的电子邮件地址,而我尝试使用ForEach()
的各种List的实现无法正常工作。我假设ForEach()
的实施不正确?
答案 0 :(得分:1)
根据要求将我的评论作为答案:
使用简单的for
循环。 List.ForEach
是一种获取string
作为参数的方法,你不能在那里替换整个引用,因为字符串是不可变的,你也不能改变它们。您必须将从string
返回的String.ToLower
重新分配给您的变量:
for(int i = 0; i < emails.Count; i++)
emails[i] = emails[i].ToLower();
旁注:如果您要将所有电子邮件小写以进行不区分大小写的比较,最好使用String.Equals
重载并使用正确的StringComparison
string email1 = "Catherine.Burke@email.co.uk";
string email2 = "catherine.burke@email.co.uk";
if (String.Equals(email1, email2, StringComparison.InvariantCultureIgnoreCase))
{
// ...
}
答案 1 :(得分:0)
layer.events.register("touchstart", layer, function(e) {
//e.xy is undefined
});
只会调用emails.ToList().ForEach(e => e.ToLower());
,但不会分配结果。
你想要的是:
ToLower()
答案 2 :(得分:0)
试试这个:
emailAddresses.ToList().ForEach(e => e.FullAddress = e.FullAdress.ToLower());
正如weertzui altready提到的那样ForEach
- 方法只是调用委托。但是,此操作的结果不会以任何方式用于您的代码中。
但是我强烈建议使用简单的foreach:
foreach(var mail in emailadresses) mail.FullAdress = mail.FullAdress.ToLower();
这对我来说似乎更具可读性。