4

X のコレクションをバインドしたくないデータ ソースがあります。X には、特定のタイプ Y のプロパティのサブセットが含まれている必要があります (Y にプロパティ PropOne、PropTwo、PropThree があるとします)。これはもちろん、匿名型で行うことができます。

void DoBind()
{
   myGrid.DataSource = myCollectionOfYs.Select(y => new {y.PropOne, y.PropTwo});
}

このメソッドを変更して、呼び出し元がプロジェクションで使用するプロパティをタイプセーフな方法で指定できるようにするにはどうすればよいですか? つまり、次のようなものです。

var expressions = new List<Expression<Func<Y, object>>>();
expressions.Add(y => y.PropOne);
expressions.Add(y => y.PropTwo);
DoBind(expressions);
4

2 に答える 2

2

セレクター関数を DoBind メソッドに渡すことはできませんか。

public static void DoBind<T, TResult>(ICollection<T> collection, Func<T,TResult> selector)
{

    DataSource = collection.Select(selector)
}

そして、次のように呼び出します。

        DoBind(list, y => new { y.Prop1, y.Prop2 });
        DoBind(list, y => new { y.Prop3, y.Prop2 });
于 2013-02-15T15:26:08.743 に答える
2

あなたのアイデアを使用して:

void DoBind(Func<Y, object> func)
{
    myGrid.DataSource = myCollectionOfYs.Select(funct);
}

そして次のように使用します:

DoBind(y => new {y.PropOne});
于 2013-02-15T15:29:45.633 に答える