C# 如何实现IEnumerable<;T>;是否使用GetEnumerator()?
我希望我的类型实现C# 如何实现IEnumerable<;T>;是否使用GetEnumerator()?,c#,ienumerable,C#,Ienumerable,我希望我的类型实现IEnumerable。简言之,我试图追随C#,但出现了一些问题: public class Simulation : IEnumerable<string> { private IEnumerable<string> Events() { yield return "a"; yield return "b"; } public IEnumerator<string> GetE
IEnumerable
。简言之,我试图追随C#,但出现了一些问题:
public class Simulation : IEnumerable<string>
{
private IEnumerable<string> Events()
{
yield return "a";
yield return "b";
}
public IEnumerator<string> GetEnumerator()
{
return Events().GetEnumerator();
}
}
公共类模拟:IEnumerable
{
私有IEnumerable事件()
{
收益率回报率“a”;
收益率回报率“b”;
}
公共IEnumerator GetEnumerator()
{
返回事件().GetEnumerator();
}
}
但是我得到了构建错误
错误1“EventSimulator.Simulation”未实现接口成员“System.Collections.IEnumerable.GetEnumerator()”EventSimulator.Simulation.GetEnumerator()无法实现“System.Collections.IEnumerable.GetEnumerator()”,因为它没有匹配的返回类型“System.Collections.IEnumerator”
您缺少
IEnumerator IEnumerable.GetEnumerator()
:
公共类模拟:IEnumerable
{
私有IEnumerable事件()
{
收益率回报率“a”;
收益率回报率“b”;
}
公共IEnumerator GetEnumerator()
{
返回事件().GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
返回GetEnumerator();
}
}
IEnumerable要求实现类型化方法和泛型方法
在msdn的社区部分,它解释了为什么您需要两者。(因为向后兼容性是给出的基本原因)。有一个问题,但是@NominSim在下面的帖子中回答了这个问题-没关系!谢谢,现在我可以把它添加到我的EF TT文件中;-)仅供参考,让Visual Studio为您键入此内容。键入
public class Simulation:IEnumerable
时,右键单击IEnumerable
部分,然后转到实现接口>实现接口。Visual Studio将填充界面中尚未填充的部分。旁白:您可以直接从内部GetEnumerator()
public class Simulation : IEnumerable<string>
{
private IEnumerable<string> Events()
{
yield return "a";
yield return "b";
}
public IEnumerator<string> GetEnumerator()
{
return Events().GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}