在对象初始值设定项中使用 "this"

use "this" inside Object initializer

假设我有这个代码:

List<MyObj> resultList = new List<MyObj>();
foreach (var item in collection)
{
    resultList.Add(new MyObj
    {
       X = item.foo,
       Y = item.bar,
       Z = [I want it to be X + Y]
    });
 }

我不能使用 'this' 关键字。还有另一种方法可以做到这一点吗? 谢谢!

您不能在对象初始值设定项内部执行此操作,您必须在创建 MyObj:

的实例后在外部执行此操作
var resultList = collection.Select(myObj => 
{
    var newObj = new MyObj
    {
        X = item.foo,
        Y = item.bar,
    };
    newObj.Z = newObj.X + newObj.Y;
    return newObj;
}).ToList();

在对象初始化器中允许它是危险的,您可以在对象的构造函数完成执行之前访问对象的属性。如果您知道您的属性不会做任何奇怪的事情,如果您知道在设置值后立即调用 getter 只会产生您设置的值,则可以将逻辑移出初始化程序。

var resultList = (
    from item in collection
    let X = item.foo
    let Y = item.bar
    let Z = X + Y
    select new MyObj {
        X = X,
        Y = Y,
        Z = Z
    }).ToList();