我在 C# 中使用以下模式:
IList<foo> x = y.Select(a => new foo
{
b = Calc1(),
c = Calc2()
}).ToList();
foreach(foo f in x)
{
f.d = b / c;
}
不过我想做的是:
IList<foo> x = y.Select(a => new foo
{
b = Calc1(),
c = Calc2()
d = b / c;
}).ToList();
所以问题是:如何修改此模式以允许分配一个值,该值取决于分配期间正在计算的其他值?
(有人可能会指出 d 应该是一个进行计算并返回值的属性。这是一个人为的例子。假设 d 的值是使用除 c 和 b 之外的其他值计算的,这些值不是稍后可用。)
最佳答案
如果您扩展它以使用完整的 LINQ 语法:
IList<foo> x = (from a in y
let bq = Calc1()
let cq = Calc2()
select new foo {
b = bq,
c = cq,
d = bq / cq
}).ToList();
这会让你得到你想要的。
有一个答案建议您重复您的方法调用(即 d = Calc1()/Calc2())——但我不建议这样做,因为 Calc1() 和 Calc2() 可能是昂贵的操作,并且不必要地执行它们两次可能会对性能产生影响。
关于c# - LINQ 依赖计算赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/529836/