I have the following excerpt from some wonderful legacy code:
Private Sub SomeMethod()
Dim deductibles As List(Of Integer) = GetDeductibles()
deductibles.RemoveAll(AddressOf LessThanMinDed)
EndSub
Private Function LessThanMinDed(ByVal i As Integer) As Boolean
Return i < MinimumDeductible()
End Function
If you're a language snob, we can write it this way:
private void SomeMethod() {
List<int> deductibles = GetDeductibles();
deductibles.RemoveAll(LessThanMinDed);
}
private bool LessThanMinDed(int i) {
return i < MinimumDeductible();
}
MinimumDeductible()
makes a database call. Is there a way to write this without writing something like x = MinimumDeductible() : RemoveAll(Function(i) i < x)
(since lambdas aren't in this version of VB.NET) that will make a call to the database just once?
Work around like so:
Public Class Foo
Private CachedMinimum As Integer
Private Sub SomeMethod()
Dim deductibles As List(Of Integer) = GetDeductibles()
Me.CachedMinimum = MinimumDeductible()
deductibles.RemoveAll(AddressOf LessThanMinDed)
End Sub
Private Function LessThanMinDed(ByVal i As Integer) As Boolean
Return i < CachedMinimum
End Function
End Class
The answer really depends on the language. In C# 2, we didn't have lambda expressions but we did have anonymous methods... so you can write:
List<int> deductibles = GetDeductibles();
deductibles.RemoveAll(delegate(int i) { return i < MinimumDeductible(); });
As far as I'm aware, there's no equivalent in the version of VB that shipped with VS 2005.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With