如果不能使用索引,为什么在 Microsoft 文档中的 ICollection<T> 接口实现示例中使用索引?

我正在尝试了解如何实现泛型集合和 IEnumerator 接口;我正在使用 Documentation provided to do so

在给定的示例中,枚举器的方法 MoveNext() 实现如下:

public bool MoveNext()
{
    //Avoids going beyond the end of the collection.
    if (++curIndex >= _collection.Count)
    {
        return false;
    }
    else
    {
        // Set current box to next item in collection.
        curBox = _collection[curIndex];
    }
    return true;
}

curIndex 用作 BoxCollection 的索引,它实现了 ICollection。如果我尝试做同样的事情,我会得到“无法将 [] 索引应用于‘System.Collections.Generic.ICollection...’类型的表达式。

文档有误,还是我做错了什么?

allcap 回答:如果不能使用索引,为什么在 Microsoft 文档中的 ICollection<T> 接口实现示例中使用索引?

BoxCollection 本身实现了索引器:

public Box this[int index]
{
    get { return (Box)innerCol[index]; }
    set { innerCol[index] = value; }
}

(您链接到的示例的第 129-133 行)

您不能在实现 ICollection<T> 的类上使用索引器是对的 - 除非该类还实现了索引器。

,

在文档中的示例代码中,_collection 是一个 BoxCollection,它也是一个 ICollection,但在该表现形式中,它被键入为 BoxCollection,因此可以应用索引,因为 BoxCollection 实现了一个 this[int] 索引器财产

如果示例代码将 _collection 声明为 some ICollection<T>,它们的代码会得到与您相同的错误;换句话说,可索引性来自它们的变量是可索引类型,这与其实现 ICollection 无关(ICollection 不要求提供索引器)

本文链接:https://www.f2er.com/633020.html

大家都在问