使用不同的类型参数实现两个通用IEnumerable接口

时间:2014-08-20 02:06:38

标签: c# generics interface

有如下代码,得到编译错误 - “...没有实现接口成员'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;
    }
}

2 个答案:

答案 0 :(得分:1)

尝试:

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();
            }
        }

答案 1 :(得分:1)

如果我理解你的问题,这里有一个示例,你可以在课堂上实现非通用的枚举器

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
    }
}