gpt4 book ai didi

c# - 为什么 List 声明 GetEnumerator() 和 IEnumerable.GetEnumerator()?

转载 作者:行者123 更新时间:2023-12-05 01:07:06 24 4
gpt4 key购买 nike

List为什么要定义这三个方法?

    public Enumerator GetEnumerator()
=> new Enumerator(this);

IEnumerator<T> IEnumerable<T>.GetEnumerator()
=> new Enumerator(this);

IEnumerator IEnumerable.GetEnumerator()
=> new Enumerator(this);

他们都在做同样的事情。仅仅拥有这个还不够吗:

public Enumerator GetEnumerator()
=> new Enumerator(this);

最佳答案

Wouldn't it be enough to just have this:

public Enumerator GetEnumerator()
=> new Enumerator(this);

不,它不会,因为那也不会实现 IEnumerable<T>IEnumerable ,其中 GetEnumerator()方法的返回类型为 IEnumerator<T>IEnumerator分别。

返回类型必须匹配才能实现接口(interface)。

确实,自己测试一下很容易:

using System.Collections;
using System.Collections.Generic;

public class MyList<T> : IEnumerable<T>
{
public Enumerator GetEnumerator() =>
new Enumerator();

// Implement this fully so we can concentrate on IEnumerable<T>
public struct Enumerator : IEnumerator<T>
{
public T Current => default;
object IEnumerator.Current => default;
public bool MoveNext() => true;
public void Reset() {}
public void Dispose() {}
}
}

这给出了以下错误:

  • 错误 CS0738:“MyList ”未实现接口(interface)成员“IEnumerable .GetEnumerator()”。 “MyList .GetEnumerator()”无法实现“IEnumerable .GetEnumerator()”,因为它没有匹配的返回类型“IEnumerator ”。
  • 错误 CS0738:“MyList ”未实现接口(interface)成员“IEnumerable.GetEnumerator()”。 “MyList .GetEnumerator()”无法实现“IEnumerable.GetEnumerator()”,因为它没有匹配的返回类型“IEnumerator”。

关于c# - 为什么 List<T> 声明 GetEnumerator() 和 IEnumerable<T>.GetEnumerator()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67883760/

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