3
 List<string> ls = new List<string>();
 Feed<Contact> f = cr.GetContacts();

        foreach (Contact e in f.Entries)
            foreach (EMail el in e.Emails)
                if (!(ls.Contains(el.Address.Substring(el.Address.LastIndexOf('@')+1))))
                    ls.Add(el.Address.Substring(el.Address.LastIndexOf('@')+1));

在上面的代码中,我试图获得不同的电子邮件 ID 域,但我得到了所有这些我的逻辑有什么问题?

测试数据:

输入:

abca@gmail.com
sdafdf@yahoo.com
sdfs@gmail.com
ssdf@gmail.com
sdfsf@someOtherDomain.com

... 这样的 20,000 个条目

我需要获得DISTINCT域名

但我的 o/p 是

gmail.com
yahoo.com
gmail.com
gmail.com
someOtherDomain.com

实际上应该是:

gmail.com yahoo.com someOtherDomain.com

4

1 回答 1

1

不清楚这里到底出了什么问题,但这是一种低效且丑陋的做法。我建议你试试这个:

var domains = (from contact in cr.GetContacts().Entries
               from email in contact.Emails
               let address = email.Address
               select address.Substring(address.LastIndexOf('@') + 1))
              .Distinct(StringComparer.OrdinalIgnoreCase)
              .ToList();

话虽如此,您的原始代码确实应该有效。你能提供一些失败的测试数据吗?

于 2010-11-24T12:42:29.407 回答