Попытка реализовать Serializble DIctionary из Keyedcollection, не может добавлять объекты - PullRequest
1 голос
/ 24 февраля 2012

Короче говоря, мне нужен был набор объектов со словоподобной функциональностью, которые можно сериализовать для сохранения пользовательских данных. Исходный словарь представлял собой класс Dictionary, который содержал массив объектов Item и количество каждого объекта, «удерживаемого» пользователем. После нахождения некоторых рекомендаций в Интернете я попытался внедрить свой собственный словарь-класс из KeyedCollection, но, похоже, не могу добавить к нему объекты. Я неправильно добавляю объекты или что-то не так с моей коллекцией?

Класс 'SerialDictionary':

public class SerialDictionary : KeyedCollection<Item, int>
{
    protected override int GetKeyForItem(Item target)
    {
        return target.Key;
    }
}

public class Item
{
    private int index;
    private string attribute;

    public Item(int i, string a)
    {
        index = i;
        attribute = a;
    }

    public int Key
    {
        get { return index; }
        set { index = value; }
    }

    public string Attribute
    {
        get { return attribute; }
        set { attribute = value; }
    }
}

Основная форма (которая пытается добавить объект)

public partial class Form1 : Form
{
    SerialDictionary ItemList;
    Item orb;

    public Form1()
    {
        InitializeComponent();
        ItemList = new SerialDictionary();
        orb = new Item(0001, "It wants your lunch!");
        orb.Key = 001;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ItemList.Add(orb);
    }
}

Ошибка при получении объекта:

Наилучшее совпадение перегруженного метода для 'System.Collections.ObjectModel.Collection.Add (int)' имеет недопустимые аргументы

Если я добавляю туда int, он компилируется, но я пытаюсь получить коллекцию объектов Item там ...

1 Ответ

1 голос
/ 25 февраля 2012

У вас оно задом наперед, оно должно быть:

public class SerialDictionary : KeyedCollection<int, Item>

* * * * * * * * * * * * * * * * * * * * * * * * сначала идет в подписи, а затем *.

...