我试图比较两个有序词典的元素中的值。我无法找到正确的编码来获取索引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,我不知道该怎么做。
非常感谢任何帮助。感谢。
答案 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