为什么在微软文档中的ICollection<T>接口实现示例中使用了索引,如果不能使用呢?
Why is indexing used in in the ICollection<T> Interface implementation example in Microsoft's documentation, if you cannot use it?
我正在尝试了解如何实现泛型集合和 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... 的表达式”...
是文档有误,还是我做的不对?
BoxCollection
本身实现了索引器:
public Box this[int index]
{
get { return (Box)innerCol[index]; }
set { innerCol[index] = value; }
}
(您链接到的示例的第 129-133 行)
你是对的,你不能在实现 ICollection<T>
的 class 上使用索引器 - 除非 class 也实现了索引器。
在文档的示例代码中 _collection
是一个 BoxCollection,它也是一个 ICollection,但在该表现形式中它被键入为 BoxCollection,因此可以应用索引,因为 BoxCollection 实现了 this[int]
索引器 属性
如果将示例代码 _collection
声明为某些 ICollection<T>
,他们的代码将得到与您的代码相同的错误;换句话说,可索引性来自于它们的变量是可索引类型,这与它也实现 ICollection 无关(ICollection 不强制提供索引器)
我正在尝试了解如何实现泛型集合和 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... 的表达式”...
是文档有误,还是我做的不对?
BoxCollection
本身实现了索引器:
public Box this[int index]
{
get { return (Box)innerCol[index]; }
set { innerCol[index] = value; }
}
(您链接到的示例的第 129-133 行)
你是对的,你不能在实现 ICollection<T>
的 class 上使用索引器 - 除非 class 也实现了索引器。
在文档的示例代码中 _collection
是一个 BoxCollection,它也是一个 ICollection,但在该表现形式中它被键入为 BoxCollection,因此可以应用索引,因为 BoxCollection 实现了 this[int]
索引器 属性
如果将示例代码 _collection
声明为某些 ICollection<T>
,他们的代码将得到与您的代码相同的错误;换句话说,可索引性来自于它们的变量是可索引类型,这与它也实现 ICollection 无关(ICollection 不强制提供索引器)