如何将字符串索引器添加到CollectionBase

本文关键字:添加 CollectionBase 索引 字符串 | 更新日期: 2023-09-27 18:15:00

我正在处理一个由第三方编写的实现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;
    }
}

我讲对了吗?不知道下一步该做什么

如何将字符串索引器添加到CollectionBase

你做对了。

通过将set { paletteEntries.Add(key, value); }行替换为set {palletteEntries[key] = value;}行来更改set访问器以检查现有条目

然后您需要开始做的就是将PalletteEntries添加到您的NamedPallette并使用它们,例如

NamedPalette myPallette = new NamedPallette();
PalletteEntry myPalletteEntry = new PalleteEntry(Color.Red, Color.Black);
myPallette ["myColors"] = myPalletteEntry;
var fetchedEntry = myPallette["myColors"];