2017-08-09 20 views
-2

これを最小限に抑えようとしています。C#プロパティのリストからオブジェクトリストを作成

List<ClassB> foo(List<ClassA> listA) 
{ 
    var listB = new List<ClassB>(); 
    foreach (var item in listA) 
     listB.Add(new ClassB(item, "stuff")); 

    return listB; 
} 

LINQを使用して、私はこれを最小限に抑えることができます方法はありますか?私はこれを最小限に抑えるために、コードベースでこれほど多くの変換が行われ、ジェネリックスは変換されるさまざまなクラスのクォークを扱うことができないためです。

+2

はい、あります。あなたはlinqを試しましたか? ( '選択 ')あなたが試したことを示してください。そこから助けてもらうことができます –

+3

すべてのクラスに「クォーク」がある場合は、いいえ、非一般的な問題を解決する一般的な解決法はありません。問題の特定のコードについては、 'listA.Select(item => new ClassB(item、" stuff ")).ToList()'を実行するだけで、他のクラスの構築がすべてのケースで異なる場合は、1一般的なシンプルな1ライナーは動作しません。 –

+0

私が間違っている場合は私を訂正してください。しかし、「選択」を使用すると、元のリストからいくつか(またはすべて)を選択することができます。しかし、どうすれば 'classB'のリストに変換できますか? – Crimson7

答えて

3

Select方法は何が必要です。基本的には、列挙型の各要素を別のものに変換することです。この場合、ClassAClassBに変換しています。

Selectの引数は、ClassAのインスタンスを取り、ClassBを返すメソッドです。この場合、この方法は、次のようになります。

ClassB MyMethod(ClassA obj) { 
    return new ClassB(obj, "stuff"); 
} 

これは、ラムダ式の形で書くことができます。

obj => new ClassB(obj, "stuff") 

あなたはList<ClassB>IEnumerableをオンにするToListを呼び出し、それはだ、Selectにこれを渡します完了!

List<ClassB> foo(List<ClassA> listA) 
{ 
    return listA.Select(obj => new ClassB(obj, "stuff")).ToList(); 
} 
+0

彼は 'listA.Select'を意味すると思います。説明もありがとう。私はそれを数分で答えにします。 – Crimson7

+1

@MongZhuおっと、OPのコードを誤解しました... – Sweeper

3

は、あなたが持っているオブジェクトから新しいオブジェクトを構築するなど、select声明の中で多くのものを行うことができます。

List<ClassB> foo(List<ClassA> listA) 
{ 
    return lisA.Select(row => new ClassB(row, "stuff").ToList(); 
} 
+0

ありがとう:) – Crimson7

3

あなたはClassBののintancesにLISTAの要素を投影するLINQを使用することができます。

listA.Select(a => new ClassB(a, "stuff")).ToList() 
関連する問題