gpt4 book ai didi

c# - 我如何实现 IEnumerable

转载 作者:IT王子 更新时间:2023-10-29 03:34:16 26 4
gpt4 key购买 nike

我知道如何实现非通用 IEnumerable,如下所示:

using System;
using System.Collections;

namespace ConsoleApplication33
{
class Program
{
static void Main(string[] args)
{
MyObjects myObjects = new MyObjects();
myObjects[0] = new MyObject() { Foo = "Hello", Bar = 1 };
myObjects[1] = new MyObject() { Foo = "World", Bar = 2 };

foreach (MyObject x in myObjects)
{
Console.WriteLine(x.Foo);
Console.WriteLine(x.Bar);
}

Console.ReadLine();
}
}

class MyObject
{
public string Foo { get; set; }
public int Bar { get; set; }
}

class MyObjects : IEnumerable
{
ArrayList mylist = new ArrayList();

public MyObject this[int index]
{
get { return (MyObject)mylist[index]; }
set { mylist.Insert(index, value); }
}

IEnumerator IEnumerable.GetEnumerator()
{
return mylist.GetEnumerator();
}
}
}

但是我也注意到 IEnumerable 有一个通用版本,IEnumerable<T> ,但我不知道如何实现它。

如果我添加 using System.Collections.Generic;到我的使用指令,然后更改:

class MyObjects : IEnumerable

到:

class MyObjects : IEnumerable<MyObject>

然后右键单击 IEnumerable<MyObject>并选择 Implement Interface => Implement Interface , Visual Studio 帮助添加了以下代码块:

IEnumerator<MyObject> IEnumerable<MyObject>.GetEnumerator()
{
throw new NotImplementedException();
}

GetEnumerator(); 返回非通用 IEnumerable 对象这次方法不起作用,所以我放在这里做什么?当 CLI 在 foreach 循环期间尝试枚举我的数组时,它现在会忽略非泛型实现并直接转向泛型版本。

最佳答案

如果您选择使用通用集合,例如 List<MyObject>而不是 ArrayList ,你会发现 List<MyObject>将提供您可以使用的通用和非通用枚举器。

using System.Collections;

class MyObjects : IEnumerable<MyObject>
{
List<MyObject> mylist = new List<MyObject>();

public MyObject this[int index]
{
get { return mylist[index]; }
set { mylist.Insert(index, value); }
}

public IEnumerator<MyObject> GetEnumerator()
{
return mylist.GetEnumerator();
}

IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}

关于c# - 我如何实现 IEnumerable<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11296810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com