当前位置:  开发笔记 > 编程语言 > 正文

值的枚举字符串名称

如何解决《值的枚举字符串名称》经验,为你挑选了7个好方法。

我有一个像这样的枚举构造:

public enum EnumDisplayStatus
{
    None    = 1,
    Visible = 2,
    Hidden  = 3,
    MarkedForDeletion = 4
}

在我的数据库中,枚举由值引用.我的问题是,如何将枚举的数字表示形式转回字符串名称.

例如,给定2结果应该是Visible.



1> Kent Boogaar..:

您可以int使用简单的强制转换将其转换为枚举成员,然后调用ToString():

int value = GetValueFromDb();
var enumDisplayStatus = (EnumDisplayStatus)value;
string stringValue = enumDisplayStatus.ToString();


更新:仅弃用使用IFormatProvider的某些重载.ToString()很好.请参阅http://groups.google.com/group/DotNetDevelopment/browse_thread/thread/dcdbeae086360208
一个最新的解决方案:http://msdn.microsoft.com/en-us/library/system.enum.getname%28v=vs.110%29.aspx
short:var stringValue =((EnumDisplayStatus)value).ToString()
@dbkk文档说明关于枚举"你的代码不应该对将返回哪个字符串做出任何假设." 因为你引用的确切情况.请参阅http://msdn.microsoft.com/en-us/library/16c1xs4z.aspx

2> algreat..:

如果您需要获取字符串"Visible"而不获取EnumDisplayStatus实例,则可以执行以下操作:

int dbValue = GetDBValue();
string stringValue = Enum.GetName(typeof(EnumDisplayStatus), dbValue);


如果你关于Mandoleen的回答有一个不准确的地方:Enum.GetName返回一个字符串,而不是一个枚举

3> Mandoleen..:

试试这个:

string m = Enum.GetName(typeof(MyEnumClass), value);



4> 小智..:

用这个:

string bob = nameof(EnumDisplayStatus.Visible);


但需要C#6+.
@AZChad知道这是件好事,当然; 但它并不真正*适用于OP的场景,因为值来自数据库(所以:运行时,而不是编译时,值)
这是如此简单,应标记为解决方案!

5> Hath..:

你可以施展它

int dbValue = 2;
EnumDisplayStatus enumValue = (EnumDisplayStatus)dbValue;
string stringName = enumValue.ToString(); //Visible

啊..肯特打败了我:)



6> 小智..:

DB到C#

EnumDisplayStatus status = (EnumDisplayStatus)int.Parse(GetValueFromDb());

C#到DB

string dbStatus = ((int)status).ToString();



7> Naveen Kumar..:

解:

int enumValue = 2; // The value for which you want to get string 
string enumName = Enum.GetName(typeof(EnumDisplayStatus), enumValue);

同样,使用GetName优于Enum的显式转换

[绩效基准代码]

Stopwatch sw = new Stopwatch (); sw.Start (); sw.Stop (); sw.Reset ();
double sum = 0;
int n = 1000;
Console.WriteLine ("\nGetName method way:");
for (int i = 0; i < n; i++) {
   sw.Start ();
   string t = Enum.GetName (typeof (Roles), roleValue);
   sw.Stop ();
   sum += sw.Elapsed.TotalMilliseconds;
   sw.Reset ();
}
Console.WriteLine ($"Average of {n} runs using Getname method casting way: {sum / n}");
Console.WriteLine ("\nExplicit casting way:");
for (int i = 0; i < n; i++) {
   sw.Start ();
   string t = ((Roles)roleValue).ToString ();
   sw.Stop ();
   sum += sw.Elapsed.TotalMilliseconds;
   sw.Reset ();
}
Console.WriteLine ($"Average of {n} runs using Explicit casting way: {sum / n}");

[样品结果]

GetName method way:
Average of 1000 runs using Getname method casting way: 0.000186899999999998
Explicit casting way:
Average of 1000 runs using Explicit casting way: 0.000627900000000002

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有