我正在实现一个基本包装数组的类:
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'。 存在显式转换(是你 错过演员?)
虽然我明白问题是什么,但我完全不知道如何修复它。任何人吗?
由于
答案 0 :(得分:7)
你可以尝试:
IEnumerable<Gene> typed = genoma;
return typed.GetEnumerator();
只是让编译器开心。当数组实现通用的Enumerable接口时,公共GetEnumerator()上不会出现这种情况。通过上面我们简单地转换为首选API。这是一个微不足道的演员;在运行时不应该进行检查(因为编译器和CLI知道它是有效的。)
答案 1 :(得分:0)
您的问题是,您要返回的是IEnumerable
,而不是IEnumerble<Gene>
将其更改为:
return genoma.Cast<Gene>().GetEnumerator();
修改强>
用另一种方式保持这个,但是,我更喜欢Marc的答案。