在对象初始值设定项中使用 "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();
假设我有这个代码:
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();