在Linq
中我们如何在不提及其他现有属性的情况下添加新属性。
例如,我们有班级MyClass
:
public class MyClass
{
public int P1 {get; set;}
public int P2 {get; set;}
}
并在运行时:
List<MyClass> list = // some MyClass objects as List ...
以及包含三个以上新属性的包装列表
var wrapperlist = list.Select(m=>
new
{
P1 = m.P1 // I don't want to do this
P2 = m.P2 // I don't want to do this
NewP1 = someNewVal1
NewP2 = someNewVal2
NewP3 = someNewVal3
});
注意我不喜欢为MyClass
的子类的新属性使用新的Wrapper类,它将MyClass
对象作为构造函数参数或类似的东西这个,因为包装类是一个通用类,它有固定的属性(NewP1
,NewP2
,NewP3
),它被设计为包装任何类型对象(例如MyClass
)。所以导致我们在MyClass
定义中进行修改的任何解决方案都是不可接受的。
更新
Wrapper
类是一个匿名对象,它是在运行时在Select
扩展方法中创建的。
答案 0 :(得分:2)
这样的事情对你有用吗?
var wrapperlist = list.Select(m =>
new
{
WrappedObject = m,
NewP1 = someNewVal1,
NewP2 = someNewVal2,
NewP3 = someNewVal3
});