C#自定义MyDictionary类实现IEnumerable接口的方法咨询
实现说明
你自定义的IEnumerable接口仅定义了一个IEnumerator GetEnumerator()方法,所以你只需要完整实现这一个方法即可完成该接口的适配。
你当前写的GetEnumerator()存在两个明显错误:
- 缺少方法返回值类型声明和访问修饰符,不符合C#语法要求
- 方法内部直接调用自身,会触发无限递归导致栈溢出
具体实现方案
这里提供两种常用的实现方式,任选其一即可:
方案1:使用yield语法自定义迭代逻辑(无需引入额外依赖)
直接遍历你内部存储的DictionaryEntry数组,只返回已经存入的有效元素:
// 替换你现有错误的GetEnumerator方法 public IEnumerator GetEnumerator() { for (int i = 0; i < ItemsInUse; i++) { yield return items[i]; } }
方案2:复用数组自带的枚举器
数组本身已经实现了枚举逻辑,只需截取有效元素部分即可,需要额外引入System.Linq命名空间:
using System.Linq; // 替换你现有错误的GetEnumerator方法 public IEnumerator GetEnumerator() { return items.Take(ItemsInUse).GetEnumerator(); }
补充修复Main方法问题
你现有代码的Main方法中没有实例化MyDictionary对象就直接调用方法,补充实例化逻辑即可正常运行:
static void Main(string[] args) { // 初始化字典,指定初始容量为10 MyDictionary dictionary = new MyDictionary(10); dictionary.Add("Mohammed", 21); dictionary.Remove("Mohammed"); Console.WriteLine("字典中的元素数量 = {0}", dictionary.Count); Console.WriteLine("字典中是否包含'Mohammed'? {0}", dictionary.Contains("Mohammed")); }
内容的提问来源于stack exchange,提问作者Mohammed Hamdoon
相关产品推荐
相关产品推荐

