1

を作成するために使用したいと呼ばれるタイプのプロパティがある場合、List<int>からをインテリジェントに作成する方法IEnumerable<CustomClass>CustomClassintcustomPropertyList<int>

List<CustomClass>を呼び出して作成できることを知っていますinstance.ToList<CustomClass>();

プロパティ情報を抽出してリストに入力するにはどうすればよいですか? ここでのベストプラクティスは何ですか?

4

3 に答える 3

3

ToList()Linq を使用すると、プロパティと結果に射影できますIEnumerable<int>

var ints = customClasses.Select(c => c.customProperty).ToList();

Linq 拡張メソッドを見たことがない場合Selectは、一般的な "射影" メソッドです。CustomClassラムダ式を受け取ります。この場合は、として表される型を取る式でありc、必要なものは何でも返します。この場合はint. Selectセット (何かを列挙可能) に取り組んでいるように、実際に応答を取得するとIEnumerable<int>、ラムダにIEnumerable基づいての型を推測できます。Select

delay-run が必要な場合はIEnumerable<int>、単にToList()通話をドロップします。

私はベスト プラクティスについて意見を述べるのは好きではありませんが、これは (Linq の基本的な理解を前提として) 意図を明確に示すクリーンなワンライナーであり、いたるところに見られます。

Linq リソース:

http://www.codeproject.com/Articles/84521/LINQ-for-the-Beginner

http://www.codeproject.com/Articles/19154/Understanding-LINQ-C

ラムダ式リソース:

http://msdn.microsoft.com/en-us/library/bb397687.aspx

または、これらのトピックは、「LINQ チュートリアル」や「ラムダ式チュートリアル」などの用語で非常に簡単に検索できます。

于 2012-04-18T09:54:04.590 に答える
0

C# 3.0、したがって LINQ を想定すると、

var intList = instance.Select(cc => cc.customProperty).ToList();
于 2012-04-18T09:54:35.400 に答える
0

これは、Linq プロジェクションを使用して簡単に実行できます。機能表記法:

 var myEnumerable = new IEnurable<CustomClass>;
 // ... fill myEnumerable
 List<int> customProperties
   = myEnumrable.Select(item => item.customProperty).ToList();

ラムダ式は int を射影item => item.customPropertyするので、int のリストを取得します。基本的に、ラムダ式はitem、パラメーターとして受け取りitem.customProperty、結果として返す関数と同等です。のようなものint foo(CustomaClass item) { return item.customProperty}。ラムダ式の特殊性は、それが匿名であり (存在しないfoo)、戻り値とパラメーターの型がコンテキストから推測されることです。

ラムダ式 (C# プログラミング ガイド)

別:

 List<int> customProperties
   = (from item in myEnumerable
      select item.customProperty).ToList();

この場合、プロジェクションはselect節で直接行われます。すべての LINQ クエリは、で具体化できるように括弧の間にありますToList()

クエリ式の構文例: 射影

そしてここに、同様のクエリのすべてのバリエーションを確認できるコード フラグメントを残します。

    public class Thing
    {
        public string Name { get; set; }
        public decimal Value { get; set; }
    }

    public decimal GetValue(Thing thing)
    {
        return thing.Value;
    }

    public Thing[] Things =
        {
            new Thing { Name="Stapler", Value=20.35M},
            new Thing { Name="Eraser", Value=0.65M}
        };

    [TestMethod]
    public void GetValueListFromThing()
    {
        // query notation, direct projection
        List<decimal> valuesA 
            = (from t in Things
               select t.Value).ToList();

        // query notation, projection with method
        List<decimal> valuesB 
            = (from t in Things
               select GetValue(t)).ToList();

        // functional notation, projection with method
        List<decimal> valuesC 
            = Things.Select(t => GetValue(t)).ToList();

        // functional notation, projection with anonymous delegate
        List<decimal> valuesD 
            = Things.Select(t => { return t.Value; }).ToList();

        // functional notation, lambda expression
        List<decimal> values
            = Things.Select(t => t.Value).ToList();

    }
于 2012-04-18T09:55:32.763 に答える