次のコード例を検討してください。
TempList.ForEach(Function(obj)
obj.Deleted = True
End Function)
そしてこれ:
TempList.ForEach(Function(obj) obj.Deleted = True)
結果は同じになると思いますが、2番目のコード例では、リストTempListのオブジェクトは変更されません。
この投稿は、理由を理解するための詳細です...?または、少なくともその理由を理解するのに役立つ情報を入手してください...
これは、Function
ではなくSub
を使用したためです。 Function
は値を返すため、コンパイラーは等号(=)が比較ではなく割り当てとして使用されていると見なします。 Function
をSub
に変更すると、コンパイラーは等号を割り当てと正しく見なします。
TempList.ForEach(Sub(obj) obj.Deleted = True)
複数行のラムダがある場合、あなたはこの問題を持っていなかっただろう:
TempList.ForEach(Function(obj)
obj.Deleted = True
Return True
End Function)
明らかに、ForEachメソッドの場合、戻り値が使用されないため、Function
を使用しても意味がありません。したがって、Sub
を使用する必要があります。