2015-07-18 1 views
3

Я пытаюсь сравнить значения в элементах двух упорядоченных словарей. Я не могу найти правильное кодирование, чтобы получить элементы в индексе 0 и преобразовать их в DictionaryEntrys. Я пытаюсь использовать следующий код:Как сравнить значения элементов между двумя упорядоченными словарями

DictionaryEntry card1 = (DictionaryEntry)(player1.Hand[0]); 
DictionaryEntry card2 = (DictionaryEntry)(player2.Hand[0]); 


if ((int)card1.Value > (int)card2.Value) 
{ 
    // do stuff 
} 

код проходит IntelliSense, но взрывается с неправильным броском. Я также могу указать код

var card1 = player1.Hand[0]; 

, но он не позволит мне получить карту 1. Значения. Насколько я могу судить, card1 необходимо преобразовать в DictionaryEntry, и я не знаю, как это сделать.

Любая помощь будет высоко оценена. Благодарю.

+0

вы можете сделать 'player1.Hand [0] .Value' ? –

+0

Нет, не могу. – Pismotality

ответ

1

Я нашел это в другом потоке, который помог мне получить на обоих ключ и значение в упорядоченном словарю:

DictionaryEntry card1 = player1.Hand.Cast<DictionaryEntry>().ElementAt(0); 

таким образом card1.Key == ключ и card1.Value == значение

+0

Ницца. Я не думал об этом. Не стесняйтесь отмечать это как ответ вместо моего, так как он ближе к тому, что вы на самом деле искали. –

6

Индексатор в OrderedDictionary реализуется следующим образом:

public object this[int index] 
{ 
    get { return ((DictionaryEntry)objectsArray[index]).Value; } 
    set { ... } 
} 

Это возвращение значения, а не пары ключ/значение. Вот почему вы не можете бросить его на DictionaryEntry.

ли ваше сравнение, как это вместо того, отливка возвращаемого значения индексатора непосредственно int:

if ((int)player1.Hand[0] > (int)player2.Hand[0]) 
{ 
    // do stuff 
} 

Вашего комментарий, это звучит, как вы хотите, чтобы иметь возможность изменить ключ тоже.

AFAIK, вы должны будете использовать ключ или индекс, чтобы получить значение, а затем удалить старый элемент и добавить/вставить новый один:

var value = (int)player1.Hand[0]; 
player1.Hand.RemoveAt(0); 
player1.Hand.Add("someNewKey", value); 

var value = (int)player1.Hand["oldKey"]; 
player1.Hand.Remove("oldKey"); 
player1.Hand.Add("someNewKey", value); 
+0

Спасибо! Это очень полезно. Тем не менее, мне нужно получить доступ как к ключу, так и к значению элементов в упорядоченном словаре, чтобы я мог добавлять, удалять и вставлять. Единственный способ, который я знаю, это сделать с помощью инструкции foreach, например. foreach Card DictionaryIntry в Player1.Hand, но это очень неудобно для кода, который я использую. Есть ли более прямой способ доступа к ключу и значению одного элемента в упорядоченном словаре? – Pismotality

+0

@ Пояснение Я изменил свой ответ. Я просто не могу изменить ключ, но есть способы обхода пути, поэтому вам не нужно перебирать весь словарь. –

+0

Спасибо за помощь. – Pismotality

Смежные вопросы