我有以下代码,
PB.ForEach(Function(x) x.Cost = GetPartCost(x.PartNumber, x.Units, x.Cost, FB))
Return PB.Sum(Function(x) (x.Cost * x.Qty))
但是它总是返回 0。我已经检查过,GetPartCost
函数执行并返回一个非零数字,但列表项成本属性从未更新。
该属性只是一个简单的属性,
Public Property Cost() As Double
Get
Return _Cost
End Get
Set(ByVal value As Double)
_Cost = value
End Set
End Property
如果我在属性的 Set
中设置断点,它永远不会被命中。
这是怎么回事?
最佳答案
这里的问题是你与赋值的比较令人困惑。
Function(x) x.Cost = GetPartCost ...
这会编译为 x.Cost
和 GetPartCost
之间的比较,而不是赋值。原因是 Function (x)
是一个 lambda 表达式,在表达式上下文中使用时 =
是比较而不是赋值。
要解决此问题,请使用语句/Sub
来生成赋值语义
Sub(x) x.Cost = GetPartCost ...
注意:Sub
lambda 在 Visual Studio 2010 之前不可用。
关于vb.net - 使用 List(Of T).ForEach 方法更新值未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6989014/