2010-05-18 3 views
3

Я рассматриваю использование OrderedDictionary. В качестве ключа я хочу использовать длинное значение (id), и значение будет настраиваемым объектом.C# Указанный индекс словаря

Я использую OrderedDictionary, потому что хочу получить объект по его идентификатору, и я хочу получить объект по его индексу 'collection'.

Я хочу использовать OrderedDictionary как это:

public void AddObject(MyObject obj) 
{ 
    _dict.Add(obj.Id, obj); // dict is declared as OrderedDictionary _dict = new OrderedDictionary(); 
} 

Где-то в моем коде у меня есть что-то подобное, как это:

public MyObject GetNextObject() 
{ 
    /* In my code keep track of the current index */ 

    _currentIndex++; 
    // check _currentindex doesn't exceed the _questions bounds 
    return _dict[_currentIndex] as MyObject; 
} 

Теперь мой вопрос. В последнем методе я использовал индекс. Представьте, что _currentIndex установлен в 10, но у меня также есть объект с идентификатором 10. Я установил Id как ключ.

Id of MyObject имеет тип long ?. Это не так?

ответ

2

Обновлено, так как я никогда не замечал часть OrderedDictionary! У индексатора есть переопределение либо object, которое будет извлекать значение по ключу, либо int, которое будет извлекать значение по индексу. Вам нужно будет указать свой индекс как объект, если вы хотите его получить по ключу, например.

_dict[(object)_currentIndex] as MyObject; 
+0

Итак, когда я передаю _currentIndex, он видит, что это int, и поэтому он знает, как искать индекс, а не id, потому что идентификатор типа long ?. ? – Martijn

+0

@Martin, извините, я никогда не замечал, что вы использовали 'OrderedDictionary', пожалуйста, см. Мой обновленный ответ. – James

+0

Нет проблем. Но _currentIndex является int и используется для получения MyObject по индексу, а не по идентификатору. Я полагаю, мне не нужно бросать _currentIndex? Мне нужно только указать индексатор, когда я хочу MyObject по id, правильно? – Martijn