实现两个具有不同类型参数的泛型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;
}
}
尝试:
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
}
}