实现两个具有不同类型参数的泛型IEnumerable接口

本文关键字:类型参数 泛型 接口 IEnumerable 两个 实现 | 更新日期: 2023-09-27 18:18:41

有如下代码,得到编译错误- "…"没有实现接口成员'System.Collections.IEnumerable.GetEnumerator()'"。

如何实现GetEnumerator的非泛型版本?

public class Giraffe { }
public class Pigeon { }
public class Sample : IEnumerable<Giraffe>, IEnumerable<Pigeon>
{
    IEnumerator<Giraffe> IEnumerable<Giraffe>.GetEnumerator()
    {
        return null;
    }
    IEnumerator<Pigeon> IEnumerable<Pigeon>.GetEnumerator()
    {
        return null;
    }
}

实现两个具有不同类型参数的泛型IEnumerable接口

尝试:

public class Pets :IEnumerable, IEnumerable<Giraffe>, IEnumerable<Pigeon>
        {
            IEnumerator<Giraffe> IEnumerable<Giraffe>.GetEnumerator()
            {
                return null;
            }
            IEnumerator<Pigeon> IEnumerable<Pigeon>.GetEnumerator()
            {
                return null;
            }
            public IEnumerator GetEnumerator()
            {
                throw new NotImplementedException();
            }
        }

如果我正确理解你的问题,这里是一个如何在你的类中实现非泛型枚举器的示例

public class Sample : IEnumerable<Giraffe>, IEnumerable<Pigeon>
{
    IEnumerator<Giraffe> IEnumerable<Giraffe>.GetEnumerator()
    {
        return null;
    }
    IEnumerator<Pigeon> IEnumerable<Pigeon>.GetEnumerator()
    {
        return null;
    }
    IEnumerator IEnumerable.GetEnumerator()
    {
        return null; //your logic for the enumerator
    }
}

由于泛型IEnumerable<T>继承了非泛型IEnumerable,因此实现IEnumerable.GetEnumerator将定义相同的实现。

为了更清晰,您可以另外将类声明为public class Sample : IEnumerable, IEnumerable<Giraffe>, IEnumerable<Pigeon>

例子
public class Sample : IEnumerable, IEnumerable<Giraffe>, IEnumerable<Pigeon>
{
    IEnumerator<Giraffe> IEnumerable<Giraffe>.GetEnumerator()
    {
        return null;
    }
    IEnumerator<Pigeon> IEnumerable<Pigeon>.GetEnumerator()
    {
        return null;
    }
    IEnumerator IEnumerable.GetEnumerator()
    {
        return null; //your logic for the enumerator
    }
}