关于c#:我是否可以使用具有通用列表的类并将其公开为默认值

Can I have a class with a generic list and expose that as the default value

我基本上想在代码中这样做:

1
2
3
4
5
6
7
PersonList myPersonList;
//populate myPersonList here, not shown

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

类声明

1
2
3
4
5
6
7
public class PersonList
{
 public List<Person> myIntenalList;

 Person CustomFunction()
 {...}
}

那么,如何在类中公开"myInternalList"作为foreach语句可以使用它的默认值呢?或者我可以吗?原因是我有大约50个类当前正在使用泛型集合,我想将它们转移到泛型,但不想重新编写大量的类。


你可以让个人列表实现IEnumerable

1
2
3
4
5
6
7
8
9
10
11
12
public class PersonList : IEnumerable<Person>
{
    public List<Person> myIntenalList;

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

    Person CustomFunction()
    {...}
}

或者更简单,只需让人员列表扩展列表:

1
2
3
4
public class PersonList : List<Person>
{
    Person CustomFunction() { ... }
}

第一种方法的优点是不公开List的方法,而第二种方法则更为方便,如果您需要该功能的话。另外,您应该将myInternalList设置为私有。


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

1
2
3
4
5
6
7
8
public class PersonList : List<Person>
{
   public bool CustomMethod()
   {
     //...
   }

}


为什么你不简单地把个人列表上的基类改成Collection?令人信服的是,它已经可以对人进行列举,所以你的前臂仍然可以工作。