C#中“this [0]”是什么意思?

时间:2013-05-20 13:05:54

标签: c#

我正在浏览一些库代码,并看到了一个类似的方法:

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

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

4 个答案:

答案 0 :(得分:97)

在班级中寻找indexer

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

以下是the official language specification的定义:

  

索引器是一个成员,它允许以与数组相同的方式对对象建立索引。索引器被声明为属性,除了成员的名称是后跟在分隔符[和]之间写入的参数列表。参数在索引器的访问器中可用。与属性类似,索引器可以是读写,只读和只写,索引器的访问器可以是虚拟的。

可以在规范的 10.9 Indexers 部分找到完整和完整的定义。

答案 1 :(得分:11)

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

例如:

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

最简单的事情就是进入它。这将告诉你完全它的目的地。

答案 2 :(得分:3)

假设类本身继承了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
}

答案 3 :(得分:1)

这意味着在此类上调用item属性的get方法。它被称为班级Indexer

  

索引器允许对类或结构的实例进行索引,就像数组一样。索引器类似于属性,除了它们的访问器接受参数。