使用来自另一个实例的属性子集以类型安全的方式创建实例?

时间:2013-02-15 15:09:18

标签: c#

我有一个数据源,我不想绑定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);

2 个答案:

答案 0 :(得分: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 });

答案 1 :(得分:2)

使用你的想法:

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

并使用如下:

DoBind(y => new {y.PropOne});