Linq在C#中创建时选择自引用

时间:2017-06-06 10:37:43

标签: c# linq

基本上我想要的是在C#中回答的相同内容: Self-references in object literal declarations

我的代码是:

private List<myObject> myFunction()
{
    return myList.Select(l => new myObject
    {
        propA = 6,
        propB = 3,
        propC = propA + propB
    }
    ).ToList();
}

当然它不起作用,因为我不能用这种方式引用propA和propB。它是正确的方法吗?

谢谢

2 个答案:

答案 0 :(得分:4)

您可以在lambda表达式中使用body:

private List<myObject> myFunction()
{
    return myList.Select(l => 
    {
        var myObject = new myObject
        {
            propA = 6,
            propB = 3        
        };

        myObject.propC = myObject.propA + myObject.propB;

        return myObject;

    }).ToList();
}

或者你可以在propC的吸气剂中返回总和:

public int propC 
{
    get
    {
        return propA + propB;
    }
}

您无需设置propC

答案 1 :(得分:3)

如果你没有使用Linq来处理对象,(例如lambda需要是表达式,而不是像Linq到SQL / Entity Framework那样的方法委托),你可以借助匿名对象和两个选择来做到这一点。语句:

return myList
    .Select(l => new {
        propA = 6,
        propB = 3})
    .Select(x => new myObject{
        propA = x.propA,
        propB = x.propB,
        propC = x.propA + x.propB
    })
    .ToList();