迭代通用集合数组的项目

时间:2015-05-18 10:17:47

标签: c# generics collections

我需要在这个类上有一个GetEnumerator,以便能够遍历数组A的任何项目。我该怎么做?

IObsColDoor[] A = {
    new IObsColDoor<S1>(),
    new IObsColDoor<S2>() 
   };

public interface IObsColDoor { }

public class ObsColDoor<T> : ObservableCollection<T>, IObsColDoor
    where T : new()
{
    public ObsColDoor() { }
    public ObsColDoor(int n = 0)
    {
        for (int i = 0; i < n; i++)
            this.Add(new T());
    }
}

像这样使用它:

IObsColDoor b = A[0];

使用b:

id(b);

.....

void id(IObsColDoor d)
{
    foreach (T1 si in d) {  etc   };

其中T1是S1和S2的基类

1 个答案:

答案 0 :(得分:0)

如果您要声明foreach个变量并在IObsColDoor中使用它们,则需要从IEnumerable继承public interface IObsColDoor : IEnumerable { }

ObsColDoor<T>

由于ObservableCollection<T>IEnumerable,您不需要在ObsColDoor<T>课程中实施IObsColDoor,因为它已经实施。

请注意:

  • 由于IEnumerable没有任何通用功能,您必须使用IEnumerable<T>代替IObsColDoor
  • IEnumerable的任何其他实现也必须实现{{1}}。