59

我正在浏览一些库代码,并看到了如下方法:

public CollapsingRecordNodeItemList List
{
    get { return this[0] as CollapsingRecordNodeItemList; }
}

包含此方法的类不是列表或可迭代的东西,那么究竟是什么this[0]意思呢?

4

4 回答 4

96

在课堂上寻找索引器。

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;
        }
    }

这是官方语言规范的定义:

索引器是使对象能够以与数组相同的方式被索引的成员。索引器的声明类似于属性,只是成员的名称是 this,后面是写在分隔符 [ 和 ] 之间的参数列表。这些参数在索引器的访问器中可用。与属性类似,索引器可以是读写的、只读的和只写的,并且索引器的访问器可以是虚拟的。

可以在规范的第10.9 节索引器中找到完整和完整的定义。

于 2013-05-20T13:07:43.570 回答
10

这意味着声明类型(或它的基类)有一个“索引器”,它可能需要一个int(或类似的)并返回......某些东西(也许是object?)。该代码调用索引器的get访问器,作为索引传递0- 然后将返回值视为 a CollapsingRecordNodeItemList(或null返回值与该值不兼容)。

例如:

public object this[int index] {
    get { return someOtherList[index]; }
}

不过,最简单的事情就是踏入其中。这会告诉你它的确切去向。

于 2013-05-20T13:07:46.143 回答
2

假设类本身继承自某种形式 if 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
}
于 2013-05-20T13:07:42.547 回答
1

这意味着在这个类上调用item属性的get方法。它被称为类的索引器

索引器允许类或结构的实例像数组一样被索引。索引器类似于属性,只是它们的访问器带有参数。

于 2013-05-20T13:07:38.197 回答