字符串值枚举在c#

字符串值枚举在c#,第1张

概述参见英文答案 > Associating enums with strings in C#                                    26 有没有办法在c#中定义枚举,如下所示? public enum MyEnum : string{ EnGb = "en-gb", FaIr = "fa-ir", ...} 好的,根据erick的方法和链接 参见英文答案 > Associating enums with strings in C#26
有没有办法在c#中定义枚举,如下所示?
public enum MyEnum : string{    EnGb = "en-gb",FaIr = "fa-ir",...}

好的,根据erick的方法和链接,我用这个来检查有效的价值从提供的描述:

public static bool IsValIDDescription(string description){    var enumType = typeof(Culture);    foreach (Enum val in Enum.GetValues(enumType))    {        FIEldInfo fi = enumType.GetFIEld(val.ToString());        AmbIEntValueAttribute[] attributes = (AmbIEntValueAttribute[])fi.GetCustomAttributes(typeof(AmbIEntValueAttribute),false);        AmbIEntValueAttribute attr = attributes[0];        if (attr.Value.ToString() == description)            return true;    }    return false;}

有什么改善?

解决方法 另一个替代方案,效率不高但是提供枚举功能是使用一个属性,如下所示:
public enum MyEnum{  [Description("en-gb")]  EnGb,[Description("fa-ir")]  FaIr,...}

而像扩展方法一样,这里是我使用的:

public static string GetDescription<T>(this T enumerationValue) where T : struct{  var type = enumerationValue.GetType();  if (!type.IsEnum) throw new ArgumentException("EnumerationValue must be of Enum type","enumerationValue");  var str = enumerationValue.ToString();  var memberInfo = type.GetMember(str);  if (memberInfo != null && memberInfo.Length > 0)  {    var attrs = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute),false);    if (attrs != null && attrs.Length > 0)      return ((DescriptionAttribute) attrs[0]).Description;  }  return str;}

那么你可以这样称呼:

MyEnum.EnGb.GetDescription()

如果它有一个描述属性,你会得到,如果没有,你得到.ToString()版本,例如“EnGb”.我有这样的原因是直接在linq-to-sql对象上使用枚举类型,但是可以在UI中显示一个很好的描述.我不知道它适合你的情况,但把它当作一个选择.

总结

以上是内存溢出为你收集整理的字符串值枚举在c#全部内容,希望文章能够帮你解决字符串值枚举在c#所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1260395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存