使用List(Of T).ForEach方法更新未按预期工作的值

Kra*_*atz 3 vb.net lambda extension-methods anonymous-methods

我有以下代码,

PB.ForEach(Function(x) x.Cost = GetPartCost(x.PartNumber, x.Units, x.Cost, FB))

Return PB.Sum(Function(x) (x.Cost * x.Qty))
Run Code Online (Sandbox Code Playgroud)

但它始终返回0.我已检查并且GetPartCost函数执行并返回非零数字,但列表项成本属性永远不会更新.

该物业只是一个简单的财产,

Public Property Cost() As Double
    Get
        Return _Cost
    End Get
    Set(ByVal value As Double)
        _Cost = value
    End Set
End Property
Run Code Online (Sandbox Code Playgroud)

如果我Set在属性中设置断点,它永远不会被击中.

这是怎么回事?

Jar*_*Par 11

这里的问题是你与作业的混淆比较.

Function(x) x.Cost = GetPartCost ...
Run Code Online (Sandbox Code Playgroud)

这可以归结为分配之间的比较,x.CostGetPartCost不是分配.原因是它Function (x)是一个表达式lambda,当在表达式的上下文中使用时,它=是比较而不是赋值.

要解决此问题,请使用语句/ Sub来生成赋值语义

Sub(x) x.Cost = GetPartCost ...
Run Code Online (Sandbox Code Playgroud)

注意:Sub在Visual Studio 2010之前,lambda不可用.