微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.net – 在VS 2005中解决没有lambda的问题

我从以下一些精彩的遗留代码中摘录了以下内容

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

如果你是一个语言势利小人,我们可以这样写:

private void SomeMethod() {
    List<int> deductibles = GetDeductibles();    
    deductibles.RemoveAll(LessthanMinDed);
}
private bool LessthanMinDed(int i) {
    return i < MinimumDeductible();
}

MinimumDeductible()进行数据库调用.有没有办法写这个没有写像x = MinimumDeductible():RemoveAll(Function(i)i< x)(因为lambdas不在这个版本的VB.NET中)将调用数据库就一次? 解决了(有点): 像这样解决

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

解决方法

答案真的取决于语言.在C#2中,我们没有lambda表达式,但我们确实有匿名方法…所以你可以写:

List<int> deductibles = GetDeductibles();    
deductibles.RemoveAll(delegate(int i) { return i < MinimumDeductible(); });

据我所知,VS 2005附带的VB版本没有相应的版本.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐