2

我创建了以下类:

Public Class Candidate
    Public Account As String
    Public StartDate As Date
    Public EndDate As Date
End Class

现在,在第二堂课中,我想List(Of Candidate)通过匹配开始日期和结束日期来进行分组。我有以下代码:

Public Class MyClass

Private _Candidates As New List(Of Candidate)
Private _Grouped_Candidates as ????????

    Sub Group_Candidiates()
        _Grouped_Candidates = From Candidate In _Candidates
            Group Candidate By StrtDt = Candidate.StartDate, EndDt = Candidate.EndDate Into Group
            Select New With {.Grp = Group, .StrtDt = StrtDt, .EndDt = EndDt}
    End Sub

End Class

然后在这个类的不同部分,我想对这个内存查询执行一个操作:

Sub DoStuff()
    For Each Grp In _Grouped_Candidates
        DoSometihng(Grp.Grp.Select(Function(Candidate) Candidate.Account).ToList, _
                                   Grp.StrtDt, _
                                   Grp.EndDt)
    Next
End Sub

这给了我一个错误,因为我没有_Grouped_Candidates正确声明。

我的问题是这是否是不好的编程习惯(将内存中的查询保存在子范围之外),如果是,应该怎么做。而且,如果没有,我怎样才能正确声明查询,以便我可以在我的课堂上使用它?

谢谢!!!

4

1 回答 1

2

匿名类型专门设计用于在单个方法的范围内使用。虽然有跨方法使用它们的方法,但它们很混乱,通常是不好的做法,总的来说,工作量远远超过它们的价值。最简单的解决方案是创建一个新的命名类型,该类型具有代表当前匿名类型使用的属性,然后使用该命名类型。负责维护代码的人将感谢您投入微小的前期时间,而不是使用凌乱的黑客。

于 2012-12-19T18:00:14.383 回答