334 Stimmen

Wie überlade ich den []-Operator in C#?

Ich möchte einen Operator zu einer Klasse hinzufügen. Ich habe derzeit eine GetValue() Methode, die ich gerne durch eine [] Betreiber.

class A
{
    private List<int> values = new List<int>();

    public int GetValue(int index) => values[index];
}

875voto

Florian Greinacher Punkte 14008
public int this[int key]
{
    get => GetValue(key);
    set => SetValue(key, value);
}

69voto

William Brendel Punkte 30822

Ich glaube, das ist es, wonach Sie suchen:

Indexer (C# Programmierhandbuch)

class SampleCollection<T>
{
    private T[] arr = new T[100];
    public T this[int i]
    {
        get => arr[i];
        set => arr[i] = value;
    }
}

// This class shows how client code uses the indexer
class Program
{
    static void Main(string[] args)
    {
        SampleCollection<string> stringCollection = 
            new SampleCollection<string>();
        stringCollection[0] = "Hello, World";
        System.Console.WriteLine(stringCollection[0]);
    }
}

35voto

Jeff Yates Punkte 59874

Der Operator [] wird als Indexer bezeichnet. Sie können Indexer bereitstellen, die eine ganze Zahl, eine Zeichenkette oder einen beliebigen anderen Typ als Schlüssel verwenden. Die Syntax ist einfach und folgt den gleichen Grundsätzen wie bei den Eigenschaftszugriffen.

Zum Beispiel in Ihrem Fall, wo ein int ist der Schlüssel oder Index:

public int this[int index]
{
    get => GetValue(index);
}

Sie können auch einen Set-Accessor hinzufügen, so dass der Indexer nicht nur lesend, sondern auch schreibend wird.

public int this[int index]
{
    get => GetValue(index);
    set => SetValue(index, value);
}

Wenn Sie mit einem anderen Typ indizieren wollen, ändern Sie einfach die Signatur des Indexers.

public int this[string index]
...

12voto

BFree Punkte 100035
public int this[int index]
{
    get => values[index];
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X