【问题标题】:Alternative to Dictionary with enum keys?使用枚举键替代字典?
【发布时间】:2012-03-17 14:32:44
【问题描述】:

在我的解决方案中,我严重依赖以枚举为键的字典。我觉得这个结构很容易理解和阅读。

上述的一个重大障碍是无法序列化它。有关这方面的更多信息,请参阅Problems with Json Serialize Dictionary<Enum, Int32>

我的问题是:
是否有一个同样可读和直观的模式来用内置的 json 序列化程序替换可序列化的 Dictionary&lt;enunm,object&gt;

今天我已将 a.Instance.QueryableFields[Fields.Title] 替换为 a.Instance.QueryableFields[ Fields.Title.ToString()] 。不是很优雅,而且容易出错。

【问题讨论】:

  • 枚举是对象上的属性,被存储为字典的值吗?在这种情况下,我可能会建议使用枚举值作为哈希码。
  • 这将如何工作?你能给我举个例子吗?

标签: c# .net


【解决方案1】:

序列化时,只需选择字符串值即可。它不是很整洁,但很有效。

a.Instance.QueryableFields.ToDictionary(x => x.Key.ToString(), x => x.Value)

【讨论】:

  • 这是我考虑过的一个选项。但是然后我必须编写自己的序列化方法。谢谢你的建议,但我正在寻找一种方法来替换整个东西。字典或枚举。
【解决方案2】:

您可以在这里轻松地用数组替换字典,因为在 C# 中枚举在内部保存为整数:

public enum MyEnum { Zero=0, One, Two };

object[] dictionary = new object[3];
dictionary[(int)MyEnum.Zero] = 4;

编辑:(见 cmets)

您也可以将Dictionary&lt;Enum, Object&gt; 替换为Dictionary&lt;Int, Object&gt;

【讨论】:

  • 只有当你确定值从0array.Length-1 没有任何中断时才有意义。如果你有一个像{A=0, B=42, C=31415} 这样的枚举,你应该创建一个31416 元素的数组...
猜你喜欢
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
相关资源
最近更新 更多