在尝试实现IEnumerable时为数组实现wrap类时出现问题

时间:2010-10-17 17:10:21

标签: c# arrays ienumerable

我正在实现一个基本包装数组的类:

public abstract class IndividualBase : IEnumerable<Gene>
{
    private readonly Gene[] genoma;

    ...

    public IEnumerator<Gene> GetEnumerator()
    {
        return genoma.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return genoma.GetEnumerator();
    }
}

问题在于它给我带来了第一个GetEnumerator()的麻烦 - 它告诉我

  

无法隐式转换类型   'System.Collections.IEnumerator'来   'System.Collections.Generic.IEnumerator'。   存在显式转换(是你   错过演员?)

虽然我明白问题是什么,但我完全不知道如何修复它。任何人吗?

由于

2 个答案:

答案 0 :(得分:7)

你可以尝试:

IEnumerable<Gene> typed = genoma;
return typed.GetEnumerator();

只是让编译器开心。当数组实现通用的Enumerable接口时,公共GetEnumerator()上不会出现这种情况。通过上面我们简单地转换为首选API。这是一个微不足道的演员;在运行时不应该进行检查(因为编译器和CLI知道它是有效的。)

答案 1 :(得分:0)

您的问题是,您要返回的是IEnumerable,而不是IEnumerble<Gene>

将其更改为:

return genoma.Cast<Gene>().GetEnumerator();

修改

用另一种方式保持这个,但是,我更喜欢Marc的答案。