[英]Enum to int, why use type cast to int rather than Convert.ToInt32(Enum)?
[英]How to order enum alphabetically rather than on int?
假设我希望我的用户能够基于枚举值对表进行排序
我的枚举看起来像这样:
public enum Letter
{
C= 0,
A,
B,
E,
D,
}
查询可能如下所示:
var letters = from l in context.Example
orderby l.Letter
select l;
升序/降序将基于枚举int值而不是字母顺序。 有没有一种简单的方法可以按字母顺序对它进行编程排序? 显然,我可以自己在Enum类中对它进行排序,但这可能会成为对较大枚举的日常工作。
我希望如何对其进行排序:
//A ACTUAL //C
//B ACTUAL //A
//C ACTUAL //B
//D ACTUAL //E
//E ACTUAL //D
您可以使用Enum.GetName
方法(或ToString()
如果我们可以依靠它返回名称):
var letters = from l in context.Example
orderby Enum.GetName(l.Letter.GetType(),l.Letter)
select l;
如果l.Letter
可以返回不同的枚举,则这也可能起作用。 但是,如果返回非枚举,它将失败。 这可能是有害的行为。 如果使用ToString()
,则可以根据对象的名称比较对象。 但是任何对象(通常)都支持ToString()
方法。
例如:
csharp> enum Foo {
> A,
> B,
> C
> }
csharp> enum Bar {
> AB,
> ZZ,
> X
> }
csharp> var l = new object[] {Foo.C,Foo.B,Bar.ZZ,Bar.AB,Bar.X,Foo.A};
csharp> from li in l orderby Enum.GetName(li.GetType(),li) select li;
{ A, AB, B, C, X, ZZ }
话虽如此,将枚举混合在一起通常没有多大意义。
您可以使用以下代码段:
Letter[] allletters = Enum.GetValues(typeof(Letter)).Cast<Letter>().ToArray();
var sortedLetters = allletters.OrderBy(l => l.ToString());
请尝试以下操作:
Letter[] letters = (Letter[])Enum.GetValues(typeof(Letter));
IEnumerable<Letter> sorted = values.OrderBy(v => v.ToString());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.