我可以使用具有通用列表的类并将其公开为默认值

时间:2010-03-05 20:08:38

标签: c# generics

我基本上想在代码中执行此操作:

PersonList myPersonList;
//populate myPersonList here, not shown

Foreach (Person myPerson in myPersonList)
{
...
}

类声明

public class PersonList
{
 public List<Person> myIntenalList;

 Person CustomFunction()
 {...}
}

那么如何在我的类中公开“myInternalList”作为Foreach语句可以使用它的默认值?或者我可以吗?原因是我有大约50个当前正在使用GenericCollection的类,我想转向泛型,但不想重写。

3 个答案:

答案 0 :(得分:9)

您可以使PersonList实现IEnumerable<Person>

public class PersonList : IEnumerable<Person>
{
    public List<Person> myIntenalList;

    public IEnumerator<Person> GetEnumerator()
    {
         return this.myInternalList.GetEnumerator();
    }

    Person CustomFunction()
    {...}
}

甚至更简单,只需使PersonList扩展List:

public class PersonList : List<Person>
{
    Person CustomFunction() { ... }
}

第一种方法的优点是不暴露List<T>的方法,而第二种方法如果你想要那种功能则更方便。此外,您应该将myInternalList设为私有。

答案 1 :(得分:5)

最简单的方法是继承您的通用列表:

public class PersonList : List<Person>
{
   public bool CustomMethod()
   { 
     //...
   }

}

答案 2 :(得分:1)

为什么不简单地将PersonList上的基类更改为Collection<Person>?可能它已经可以枚举人,所以你的foreach仍然可以工作。