我有以下代码,
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
中设置断点,它永远不会被击中。
这是怎么回事?
答案 0 :(得分:11)
这里的问题是你与作业的混淆比较。
Function(x) x.Cost = GetPartCost ...
这会归结为x.Cost
和GetPartCost
之间的比较而不是作业。原因是Function (x)
是一个表达式lambda,当在表达式=
的上下文中使用时,它是比较而不是赋值。
要解决此问题,请使用语句/ Sub
来生成赋值语义
Sub(x) x.Cost = GetPartCost ...
注意:Sub
lambdas在Visual Studio 2010之前不可用。