5

我有一个具有 Recipients 属性(字符串数据类型)的 Report 对象。Recipients 属性将保存所有收件人的电子邮件地址comma separated string。我需要从逗号分隔的字符串中创建一个电子邮件对象的“<strong>Collection”。我有以下代码使用字符串列表 首先获取电子邮件地址。然后我创建了一个电子邮件对象的集合。

有没有更好的方法来避免使用多余的 List 和 Collection LINQ

  Report report = new Report();
  report.Recipients   = "test@test.com, demo@demo.com";

  List<string> emailAddressList = new List<string>( report.Recipients.Split(',') );
  Collection<Email> emailObjectCollection = new Collection<Email>();

  foreach (string emailAddress in emailAddressList)
  {
           Email email = new Email();
           email.EmailAddress = emailAddress;
           emailObjectCollection.Add(email);
  }

参考资料

  1. 避免使用一本字典的更好代码 - 区分大小写问题
  2. 使用 linq 删除列表中的重复项
  3. 使用 LINQ 跨多个属性查找重复项
  4. C#:List<T> 和 Collection<T> 之间的区别(CA1002,不要公开通用列表)

CA1002:不要公开通用列表。System.Collections.Generic.List 是为性能而非继承而设计的通用集合,因此不包含任何虚拟成员。http://msdn.microsoft.com/en-us/library/ms182142(v=vs.80).aspx

4

3 回答 3

4

你可以只使用一个HashSet.

var emailObjectCollection = new HashSet<Email>(
     report.Recipients.Split(',').Select(e => new Email() { EmailAddress = e }));
于 2012-11-29T14:49:32.590 回答
4
var  emailObjectCollection =   report.Recipients.Split(',')
                                    .Select(m=>new Email(){EmailAddress = m})
                                    .ToList()
于 2012-11-29T14:50:14.820 回答
1

就在我的脑海中:

var emailObjectCollection = new Collection<Email>(
    new List<string>(report.Recipients.Split(',')).Distinct()
        .Select<string, Email>(e => 
        {
            var email = new Email();
            email.EmailAddress = e;
        }).ToList());

那应该是Collection<T>用唯一值填充 a 的 LINQ-y 方式。只是好奇,为什么要使用 a Collection?如果您需要传递这个可枚举,使用它不是更有意义IEnumerable吗?

另外,您可以使用抑制属性抑制CA1002消息 - 不时有规则的有效例外(恕我直言)。

于 2012-11-29T15:17:23.333 回答