C#实现泛型IEnumerable<Mailbox>接口遇CS0738错误,求问题原因
问题原因及解决方案
错误的核心原因是:IEnumerable<Mailbox> 继承自非泛型的 IEnumerable 接口,因此你的类必须同时实现两个GetEnumerator方法:
- 泛型版本:
IEnumerator<Mailbox> GetEnumerator()(你已经实现了这个) - 非泛型版本:
IEnumerator IEnumerable.GetEnumerator()(你遗漏了这个)
另外你的AddMailbox方法存在语法错误:void返回类型的方法不能使用return语句返回值(List.Add本身就是无返回值的方法)。
修正后的完整代码
using System.Collections; // 需要引入这个命名空间来使用非泛型的IEnumerator internal class Mailboxes : IEnumerable<Mailbox> { private List<Mailbox> MailboxesList = new List<Mailbox>(); public void AddMailbox(Mailbox mailbox) { MailboxesList.Add(mailbox); // 去掉多余的return } // 泛型版本的GetEnumerator(公开实现) public IEnumerator<Mailbox> GetEnumerator() { return MailboxesList.GetEnumerator(); } // 非泛型版本的GetEnumerator(显式接口实现) IEnumerator IEnumerable.GetEnumerator() { // 直接调用泛型版本,避免重复逻辑 return GetEnumerator(); } }
关键说明
- 显式实现非泛型接口方法:通过
IEnumerable.GetEnumerator()的写法,明确这是实现非泛型接口的成员,避免和泛型版本冲突。 - 命名空间引入:必须添加
using System.Collections;,否则无法识别非泛型的IEnumerator类型。 - 修正AddMailbox方法:移除
return语句,因为List.Add没有返回值,void方法不需要返回任何内容。
内容的提问来源于stack exchange,提问作者user3844416
相关产品推荐
相关产品推荐

