我从以下一些精彩的遗留代码中摘录了以下内容:
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版本没有相应的版本.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。