【问题标题】:retrieve index value after sorting Enum alphabetically按字母顺序对枚举排序后检索索引值
【发布时间】:2013-02-15 17:37:37
【问题描述】:

按字母顺序对 typeof(EnumType) 进行排序的有效方法是什么?

枚举值的索引是非顺序的,但按字母顺序排序。 (即苹果 = 5,香蕉 = 2,哈密瓜 = 3)

暂时实例化没问题。

最终我需要所选特定枚举值的索引代码。

我问是因为我想出的方法看起来不是最好的:

Array tmp = Enum.GetValues(typeof(EnumType));
string[] myenum = tmp.OfType<object>().Select(o => o.ToString()).ToArray();
Array.Sort(myenum);
int enum_code = (int)Enum.Parse(typeof(EnumType), myenum.GetValue((int)selected_index).ToString());
string final_code = enum_code.ToString());

【问题讨论】:

  • 您可以使用 OrderBy(o =&gt; o.ToString()) 简化第 2 行和第 3 行。但是,我不是 100% 清楚您要在这里实现什么。
  • 因为选择的索引不直接映射创建的Array tmp的索引值。 (选定的索引是基于字母顺序的,而 tmp 创建一个索引顺序为增量的数组,我需要使用 selected_index 变量然后再检索..

标签: c# linq


【解决方案1】:

您可以使用 Linq 编写更紧凑和可维护的代码。除非您在高性能应用程序的内部循环中执行此操作,否则我怀疑 Linq 与您的原始代码与任何其他可能的实现的速度是否会很重要:

var sorted = (from e in Enum.GetValues(typeof(EnumType)).Cast<EnumType>()
              orderby e.ToString() select e).ToList();

【讨论】:

  • 您好,我收到以下消息:错误 837 找不到源类型“System.Array”的查询模式的实现。未找到“OrderBy”。考虑明确指定范围变量“e”的类型。
  • @EricJ。 GetValues 返回Array,它实现了IEnumerable,但没有实现IEnumerable&lt;T&gt;,所以你需要在那里调用Cast&lt;EnumType&gt;()
【解决方案2】:

鉴于该错误,一个更费力(且与 .net 2 兼容)的解决方案是;

SortedDictionary<string, MyEnumType> list = new SortedDictionary<string, MyEnumType>();
foreach (Enum e in Enum.GetValues(typeof(MyEnumType)))
{
    list.Add(e.ToString(), (MyEnumType)e);
}

检索枚举;

MyEnumType temp = list["SomeValue"];

【讨论】:

  • 对不起,可能是我的问题不够清楚。我最终需要那个枚举值的索引。
猜你喜欢
  • 1970-01-01
  • 2014-07-11
  • 2017-06-11
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
相关资源
最近更新 更多