簡體   English   中英

如何使用LINQ避免冗余List

[英]How to avoid redundant List using LINQ

我有一個Report對象,它具有Recipients屬性(String數據類型)。 “收件人”屬性將以comma separated string保存所有收件人的電子郵件地址。 我需要從逗號分隔的字符串創建電子郵件對象的“ 集合 ”。 我有以下代碼使用字符串列表來獲取電子郵件地址。 然后我創建了一個電子郵件對象的集合。

有沒有更好的方法來避免使用LINQ冗余的List和Collection?

  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

你可以使用HashSet

var emailObjectCollection = new HashSet<Email>(
     report.Recipients.Split(',').Select(e => new Email() { EmailAddress = e }));
var  emailObjectCollection =   report.Recipients.Split(',')
                                    .Select(m=>new Email(){EmailAddress = m})
                                    .ToList()

就在我的頭頂:

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>的LINQ-y方法。 只是好奇,為什么要使用Collection 如果你需要傳遞這個可枚舉的內容,使用IEnumerable會不會更有意義嗎?

另外,您可以使用抑制屬性抑制CA1002消息 - 規則有時會有有效的例外(IMHO)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM