Как добавить строковый индексатор в CollectionBase - PullRequest
1 голос
/ 16 ноября 2011

Я имею дело с классом, написанным третьей стороной, который реализует System.Collections.CollectionBase:

public class Palette : CollectionBase, ICloneable

Единственный недостаток, который у меня есть, заключается в том, что я могу получить доступ к его элементам только через целочисленный индекс: [0], [1], [2]. Мне нужно улучшить функциональность этого класса, чтобы я мог получить доступ к элементу через строку, чтобы я мог сделать что-то вроде этого:

["asian"] = Color.Yellow, ["black"] = Color.Black, ["White"] = Color.White

Так что я попытался обернуть это в моем собственном классе. Пока что у меня есть:

public class NamedPalette : Palette
{
    private Dictionary<string, PaletteEntry> paletteEntries =
        new Dictionary<string, PaletteEntry>();

    public PaletteEntry this[string key]
    {
        get { return paletteEntries[key]; }
        set { paletteEntries.Add(key, value); }
    }
    public NamedPalette()
    {

    }
}
public class PaletteEntry
{
    private Color color;
    private Color color2;
    public PaletteEntry(Color color, Color color2)
    {
        this.color = color;
        this.color2 = color2;
    }
}

Я на правильном пути? Не уверен, что делать дальше.

1 Ответ

1 голос
/ 16 ноября 2011

Вы на правильном пути.

Просто измените установленный аксессор, чтобы проверить существующие записи, заменив строку set { paletteEntries.Add(key, value); } на set {palletteEntries[key] = value;}

Все, что вам нужно для начала, это добавить PalletteEntries в вашу NamedPallette и использовать их, например,

NamedPalette myPallette = new NamedPallette();
PalletteEntry myPalletteEntry = new PalleteEntry(Color.Red, Color.Black);
myPallette ["myColors"] = myPalletteEntry;
var fetchedEntry = myPallette["myColors"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...