我正在查看一些库代码,看到了一个像这样的方法:
public CollapsingRecordNodeItemList List
{
get { return this[0] as CollapsingRecordNodeItemList; }
}
包含这个方法的类不是一个列表或可迭代对象,所以 this[0]
到底代表什么意思?
我正在查看一些库代码,看到了一个像这样的方法:
public CollapsingRecordNodeItemList List
{
get { return this[0] as CollapsingRecordNodeItemList; }
}
包含这个方法的类不是一个列表或可迭代对象,所以 this[0]
到底代表什么意思?
在类中查找索引器。
C#允许您定义索引器以允许这种类型的访问。
以下是“SampleCollection”官方指南中的示例。
public T this[int i]
{
get
{
// This indexer is very simple, and just returns or sets
// the corresponding element from the internal array.
return arr[i];
}
set
{
arr[i] = value;
}
}
完整的定义可以在规范的第10.9节“索引器”中找到。索引器是一种成员,使对象可以像数组一样进行索引。索引器的声明方式与属性类似,只不过成员的名称为“this”,后跟在方括号[和]之间编写的参数列表。这些参数可以在索引器的访问器中使用。与属性类似,索引器可以是读写、只读或只写,并且索引器的访问器可以是虚拟的。
string
而不是int
:public GoObject this[string name] { get; set; }
。我猜想还有另一个地方也有这样的属性。 - Cemre Mengüpublic virtual GoObject this[int index] { get; set; }
:) - Cemre Mengü这意味着声明类型(或其基类)具有“索引器”,该索引器可能需要一个int
(或类似类型)并返回...某些内容(也许是object
?)。 代码调用索引器的get
访问器,将0
作为索引传递 - 然后将返回的值视为CollapsingRecordNodeItemList
(如果返回的值与此不兼容,则为null
)。
例如:
public object this[int index] {
get { return someOtherList[index]; }
}
最简单的方法就是踏进去,这会让你准确地知道它将去往何方。
IList
/IList<T>
继承,它只返回(并转换)集合中的第一个元素。public class BarCollection : System.Collections.CollectionBase
{
public Bar FirstItem
{
get { return this[0] as Bar; }
}
#region Coming From CollectionBase
public Object this[ int index ] {
get { return this.InnerList[index]; }
set { this.InnerList[index] = value; }
}
#endregion
}
IEnumerable
没有定义索引器,我猜您的意思是 IList<T>
。 - Jodrell索引器允许对类或结构的实例进行索引,就像数组一样。索引器类似于属性,只是它们的访问器接受参数。
this[int index]
或this[long index]
或类似的东西...你不能将整数 (0
) 作为string name
传递进去。 - Marc Gravell