2016-06-13 5 views
0

プロパティと量が異なる配列から総称リストを作成できるかどうかを知りたいと思います。私は各オブジェクトの同じフィールドでこれを行うことができるいくつかの投稿を見てきましたが、異なるプロパティ名があり、それらの数が異なる場所はありません。c#リストの作成<object>異なるプロパティ名を持つ配列から

私のリストを取り込む際に何らかの形で別のプロパティを「マッピング」の方法がなければならないようですが、私は、Webサービスへのアクセス持っている..

を感じている - 私は制御することはできませんことを - 私に与えます指定されたオブジェクトのプロパティの数。すべてが貧弱な名前であり、いくつかは無関係です。

現在、foreachループを使用して配列内のすべてのアイテムを循環させてから、ジェネリックリストのオブジェクトのクラスコンストラクタを使用してListに追加します。

私の配列に返されるアイテムの数が多い場合、このメソッドは本当に汚いと感じ始め、より洗練されたソリューションがあるかどうかを知りたいと思います。私は私が制御することはできません、Webサービスで私に渡された以下のプロパティを持つオブジェクトの配列を、持っていると仮定し、手の込んだ

  • HorribleName1(文字列)
  • HorribleName2(文字列)
  • HorribleName3(日時)
  • HorribleName4(int型)

が、私のローカルクラスには、次のものがありプロパティ...

  • 姓(文字列)
  • 姓(文字列)
  • dateOfBirthの(日時)

私はHorribleName1が人の最初の名前であり、そしてHorribleName2が最後である知っています名。私はまた、HorribleName3が彼らの生年月日であり、HorribleName4は無関係であることを知っています。

はこれより私のジェネリックリストを作成するための良い方法はあります:

List<myPerson> myList = new List<myPerson>();  
foreach (ArrayObject person in HorribleArray) 
{ 
    myList.Add(new myPerson(HorribleName1, HorribleName2, HorribleName3)); 
} 
+0

'HorribleName3(日時)は'自分の誕生日で、私は仮定しない4。あなたの道は働いています。 –

+0

はい、申し訳ありません。私はそれを明確にしようとしたが、明らかに十分に投稿したものをチェックしなかった... :) – Karl

答えて

6

それは純粋に審美的だが、あなたがそうのようなあなたのデータを投影するLINQを使用することができますように、確かに

List<myPerson> myList = (from person in HorribleArray 
         select new Person() 
         { 
          FirstName = person.horribleName1, 
          Lastname = person.horribleName2, 
          Birthday = person.HorribleName3 
         }).ToList(); 

ジムは、オブジェクト初期化子を使用する代わりに、同じコンストラクタ構文を使用することができます。

List<myPerson> myList = (from person in HorribleArray 
         select new Person(person.horribleName1, person.horribleName2, person.HorribleName3)).ToList(); 

しかし、特に名前を変更するプロパティを投影すると、オブジェクトの初期設定によってコードがはるかに読みやすくなります。ジムさんのコメントに続いて

は、私はあなたが初期化子を使用するプロパティを公開することにしたくないかもしれないことに同意しますので、さらに別のオプションは、名前付き引数を使用することです:

List<myPerson> myList = (from person in HorribleArray 
         select new Person(
          firstName: person.horribleName1, 
          lastName: person.horribleName2, 
          birthday: person.HorribleName3)).ToList(); 
+0

OPが使用するコンストラクタ構文の使用を検討することもできます。それは '新しいPerson(HorribleName1、HorribleName2、HorribleName3)を選択する 'です。 –

+0

ありがとうございます。自分のデータをテストしたらすぐに回答としてマークします。 – Karl

+0

オブジェクトイニシャライザがコードを読みやすくすることに同意します。残念なことに、プロパティーセッターは 'public'でなければなりません。私はまだ、私が好む悪と悪のバランスを決めていない。 –

関連する問題