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

C# 使用不同类型参数实现两个通用IEnumerable接口,c#,generics,interface,C#,Generics,Interface,代码如下所示,出现编译错误-“…未实现接口成员'System.Collections.IEnumerable.GetEnumerator()'” 如何实现GetEnumerator的非通用版本 public class Giraffe { } public class Pigeon { } public class Sample : IEnumerable<Giraffe>, IEnumerable<Pigeon> { IEnumerator<Giraffe

代码如下所示,出现编译错误-“…未实现接口成员'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,IEnumerable
{
IEnumerator IEnumerable.GetEnumerator()
{
返回null;
}
IEnumerator IEnumerable.GetEnumerator()
{
返回null;
}
}
试试:

公共类宠物:IEnumerable,IEnumerable,IEnumerable
{
IEnumerator IEnumerable.GetEnumerator()
{
返回null;
}
IEnumerator IEnumerable.GetEnumerator()
{
返回null;
}
公共IEnumerator GetEnumerator()
{
抛出新的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。是的,我想是这样。我读了一篇文章,我很好奇如何实现它。IEnumerator实际上需要泛型类型。我尝试过你的方法,但我遇到了另一个错误。将
using System.Collection
添加到你的使用列表中。它没有在
System.Collection.Generics
命名空间中定义。在这种情况下,您应该抛出
NotSupportedException
(因为通过设计,该方法将不会实现)。
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
    }
}
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
    }
}