加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 23:26:43 所属栏目:百科 来源:网络整理
导读:我试图比较两个有序字典的元素中的值.我无法找到正确的编码来获取索引0处的元素并将它们转换为DictionaryEntrys.我想使用以下代码: DictionaryEntry card1 = (DictionaryEntry)(player1.Hand[0]); DictionaryEntry card2 = (DictionaryEntry)(player2.Hand[
我试图比较两个有序字典的元素中的值.我无法找到正确的编码来获取索引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];

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

任何帮助将非常感激.谢谢.

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读