5

Recipients プロパティ (String データ型) を持つ Report オブジェクトがあります。Recipients プロパティは、すべての受信者の電子メール アドレスを に保持しますcomma separated string。コンマ区切りの文字列からメール オブジェクトの「<strong>コレクション」を作成する必要があります。 最初にメールアドレスを取得するために文字列のリストを使用する次のコードがあります。次に、電子メール オブジェクトのコレクションを作成します。

を使用して冗長な 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. 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 の方法である必要があります。好奇心旺盛ですが、なぜ ? を使用するのCollectionですか? この列挙型を渡す必要がある場合は、 を使用する方が理にかなっていませんIEnumerableか?

さらに、抑制属性を使用してメッセージを抑制することもできCA1002ます。ルールには有効な例外が時々あります (IMHO)。

于 2012-11-29T15:17:23.333 に答える