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

标签 c#

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

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
}

从您的评论来看,您似乎也希望能够修改 key 。

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

关于c# - 如何比较两个有序字典之间的元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31487203/

相关文章:

c# - 从 MVC 共享 View 中从数据库获取数据

c# - bool dataGridComboBox 列显示是/否

c# - 如何在静态基方法中创建继承的实例?

c# - 读取文件流读取器

c# - 在 XSLT 参数列表中传递对象列表并在 C# 中的 xsl 中访问它

c# - MiniProfiler 结果 UI 显示空名称,因为使用了 SqlServerStorage

c# - 在 Clean Architecture 中为 Autofac 实现 Serilog 上下文记录器注入(inject)的正确方法是什么?

c# - 如何获取所有 Excel 功能区选项卡 ID 和标签?

c# - 在 Debug模式下运行的相同 Android 应用程序在 Release模式下崩溃

c# - 修改 IEnumerable foreach 与 List<T>.ForEach 中的结构