我有很多返回列表的属性。我通常这样做:
Public ReadOnly Property activeSchedulesAsOf(ByVal target As Date) As List(Of schedule)
Get
Dim list As New List(Of schedule)
For Each c As Contract In contracts
For Each s As Schedule in c.schedules
If s.isActiveAsOf(target) Then list.add(s)
Next
Next
Return list
End Get
End Property
这样做会有什么好处吗?
Public ReadOnly Property activeSchedulesAsOf(ByVal target As Date) As List(Of schedule)
Get
Dim list As New List(Of schedule)
For Each c As Contract In contracts
list.AddRange(c.schedules.Where(Function(s) s.isActiveAsOf(target)))
Next
Return list
End Get
End Property
答案 0 :(得分:0)
AddRange
技术上应该更快,因为在内部调用Array.Copy
而不是枚举集合,如果您正在处理ICollection<T>
,例如List<T>
。在您的情况下,由于您通过IEnumerable<T>
提供Where
,因此需要调用ToList
来获取该实现(否则它只是在内部枚举)。
除非您正在处理很多真正的大型列表,否则您可能不太可能看到太多差异。除了表现之外还有其他事情需要考虑
在我看来,第二个更简洁,用更少的代码来做(但是,我只是喜欢使用LINQ!)。然而,你也可以争辩说它的可读性略低于第一......这真的只是个人品味。