如何比较两个有序字典之间的元素值

时间:2015-07-18 02:31:37

标签: c#

我试图比较两个有序词典的元素中的值。我无法找到正确的编码来获取索引0处的元素并将它们转换为DictionaryEntrys。我正在尝试使用以下代码:

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


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

代码传递智能感知,但是会因无效的强制转换而爆炸。我也可以编码

 var card1 = player1.Hand[0];

但它不允许我检索card1.Value。据我所知,card1需要转换为DictionaryEntry,我不知道该怎么做。

非常感谢任何帮助。感谢。

2 个答案:

答案 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);

答案 1 :(得分:1)

我在另一个帖子中找到了这个,这有助于我获得有序词典中的键和值:

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

因此card1.Key ==键 和card1.Value == value