0

私は C# は初めてですが、OOP は初めてではありません。Java はよく知っています。私は、これをコーディングしていた人たちが私たちにたくさんのプロジェクトに投げ込まれました:

public List<IEnumerable<SelectListItem>> generateCriteriaOptions()

Java のジェネリックは理解できますが、このステートメントでは理解できません。私が理解していることから、ジェネリック リストはリストになるので、ジェネリック型内にジェネリック型があることは私にはわかりません。誰かが私のためにこのコードを説明してもらえますか?

完全な方法は次のとおりです。

 public List<IEnumerable<SelectListItem>> generateCriteriaOptions()
    {
        List<IEnumerable<SelectListItem>> criteriaLists = new List<IEnumerable<SelectListItem>>();
        List<Object> list = new List<Object>();
        Patient p = new Patient();
        list.Add(new {key="",val="All"});
        list.Add(new { key = KEY_ACCOUNT_NUMBER, val = "Account #" });
        list.Add(new { key = KEY_PATIENT_TYPE, val = "Patient Type" });
        list.Add(new { key = KEY_SUBBED_TO, val = "Outsource Company" });
        criteriaLists.Add(new SelectList(list,"key","val"));

        return criteriaLists;
    }
4

3 に答える 3

1

.NET には型消去がないため、Java のジェネリックは .NET のジェネリックとは大きく異なります。IEmumerable のリストを返すように指定してから、List オブジェクトをリストに追加できます。List は IEmumerable を実装しているため、これはエラーではありません。

ただし、あなたの場合、タイプ SelectList のオブジェクトが追加されます。私は、SelectList が SelectListItem の IEnumerable を実装しているか、それを行うクラスを継承していると推測します。また、SelectList に加えて、SelectListItems の供給として機能するクラスが他にもあると思います。メソッドから返された List は、クラスではなくジェネリック インターフェイスのインスタンスをリスト要素の型として指定するため、同じリスト内で IEnumerable のさまざまな実装を組み合わせて一致させることができます。

于 2012-04-30T23:48:14.387 に答える
0

これは、戻りオブジェクトが単にある種のコレクションSelectListItems(つまりコレクションのコレクション)のリストであることを意味します。と大差ありませんSelectListItem[][]

于 2012-04-30T23:32:37.387 に答える
0

List<IEnumerable<SelectListItem>>のリストを意味しますIEnumerable<SelectListItem>。つまり、リストの各要素は を実装しIEnumerable<SelectListItem>ます。これはSelectListItemシーケンスのリストです。

于 2012-04-30T23:55:36.290 に答える