2

次のクラスを作成しました。

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

次に、2番目のクラスで、を取得し、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 に答える