59 votes

Que signifie "this[0]" en C# ?

Je parcourais le code d'une bibliothèque et j'ai vu une méthode du genre :

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

La classe qui contient cette méthode n'est pas une liste ou quelque chose d'itérable, alors que fait exactement this[0] C'est-à-dire ?

96voto

Benjamin Gruenbaum Points 51406

Cherchez un indexeur dans la classe.

C# vous permet de définir des indexeurs pour permettre ce type d'accès.

Voici un exemple tiré du guide officiel pour "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;
        }
    }

Voici la définition de la spécification officielle de la langue :

Un site indexeur est un membre qui permet aux objets d'être indexés de la même manière qu'un tableau. Un indexeur est déclaré comme une propriété sauf que le nom du membre est this suivi d'une liste de paramètres écrits entre les délimiteurs [ et ]. Les paramètres sont disponibles dans le ou les accesseurs de l'indexeur. Comme les propriétés, les indexeurs peuvent être en lecture-écriture, en lecture seule ou en écriture seule, et les accesseurs d'un indexeur peuvent être virtuels.

On peut trouver la définition complète et exhaustive dans la section 10.9 Répertoires de la spécification.

10voto

Marc Gravell Points 482669

Cela signifie que le type déclarant (ou une classe de base de celui-ci) possède un "indexeur" qui prend vraisemblablement un fichier int (ou similaire) et renvoie... quelque chose (peut-être object ?). Le code appelle l'indexeur get accesseur, passage 0 en tant qu'index - et traite ensuite la valeur retournée comme un CollapsingRecordNodeItemList (ou null la valeur renvoyée n'est pas compatible avec cela).

Par exemple :

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

La chose la plus facile à faire est d'y entrer, cependant. Cela vous dira exactement où il va.

2voto

Brad Christie Points 58505

En supposant que la classe elle-même hérite d'une forme si IList / IList<T> il ne fait que retourner (et couler) le premier élément de la collection.

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
}

1voto

Damien_The_Unbeliever Points 102139

Il s'agit d'invoquer le item de la propriété get sur cette classe. Elle s'appelle la méthode Indexeur

Les indexeurs permettent aux instances d'une classe ou d'une structure d'être indexées comme des tableaux. Les indexeurs ressemblent aux propriétés, sauf que leurs accesseurs prennent des paramètres.

0voto

user707727 Points 300

Votre classe hérite-t-elle d'un type de collection ? Si c'est le cas, ce code renverra le premier élément de cette collection (s'il est de type CollapsingRecordNodeItemList, sinon, il renverra null).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X