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

Java 中的泛型与 .NET 中的泛型非常不同,因为 .NET 中没有类型擦除。您可以指定要返回一个 IEmumerable 列表,然后将 List 对象添加到您的列表中。因为 List 实现了 IEmumerable,所以这不是错误。

但是,在您的情况下,添加了 SelectList 类型的对象。我会猜测说 SelectList 实现了 SelectListItem 的 IEnumerable,或者继承了执行它的类。我还猜想除了 SelectList 之外,还有其他类可以作为 SelectListItems 的供应。由于从您的方法返回的 List 将泛型接口的实例而不是类指定为列表元素类型,因此您可以在同一个列表中混合和匹配 IEnumerable 的不同实现。

于 2012-04-30T23:48:14.387 回答
0

List<IEnumerable<SelectListItem>>表示 的列表IEnumerable<SelectListItem>。换句话说,列表的每个元素都实现了IEnumerable<SelectListItem>. 所以这是一个SelectListItem序列列表。

于 2012-04-30T23:55:36.290 回答
0

这意味着返回对象只是某种集合的列表SelectListItems(即集合的集合)。和 没有太大区别SelectListItem[][]

于 2012-04-30T23:32:37.387 回答