java枚举值属性_获取枚举值的属性

更新时间:2023-08-03 13:01:20 阅读: 评论:0

java枚举值属性_获取枚举值的属性
我想知道是否可以获取枚举值⽽不是枚举本⾝的属性? 例如,假设我有以下枚举:
using System.ComponentModel; // for DescriptionAttribute
enum FunkyAttributesEnum
{
[Description("Name With Spaces1")]
NameWithoutSpaces1,
[Description("Name With Spaces2")]
15000韩元NameWithoutSpaces2
}
我想要的是枚举类型,产⽣2个元组的枚举字符串值及其描述。
价值很容易:
Array values = System.Enum.GetValues(typeof(FunkyAttributesEnum));
foreach (int value in values)
房地产图片Tuple.Value = Enum.GetName(typeof(FunkyAttributesEnum), value);
但是,如何获取描述属性的值以填充Tuple.Desc? 我可以考虑如果Attribute属于枚举本⾝,那么该怎么做,但是我对如何从枚举的值中获取它感到困惑。
#1楼
您还可以定义⼀个枚举值,例如Name_Without_Spaces ,当需要描述时,请使⽤Name_Without_Spaces.ToString().Replace('_', ' ')⽤空格替换下划线。
#2楼
我实现了此扩展⽅法,以从枚举值获取描述。 它适⽤于所有枚举。
public static class EnumExtension
{
public static string ToDescription(this System.Enum value)
海南有什么好玩的{
FieldInfo fi = value.GetType().GetField(value.ToString());
var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), fal);
再字组词
return attributes.Length > 0 ? attributes[0].Description : value.ToString();
}
}
#3楼
除了AdamCrawford响应之外 ,我还创建了⼀种更专业的扩展⽅法,将其提要以获取描述。
public static string GetAttributeDescription(this Enum enumValue)
{
var attribute = enumValue.GetAttributeOfType();
return attribute == null ? String.Empty : attribute.Description;
}
因此,为了获得描述,您可以使⽤原始扩展⽅法作为
string desc = myEnumVariable.GetAttributeOfType().Description
英语主题
或者您可以简单地将扩展⽅法调⽤为:
string desc = myEnumVariable.GetAttributeDescription();
希望可以使您的代码更具可读性。
#4楼
这是从Display属性获取信息的代码。 它使⽤通⽤⽅法检索属性。 如果找不到该属性,它将枚举值转换为字符串,⽽pascal / camel⼤⼩写转换为标题⼤⼩写( 在此处获得代码)
public static class EnumHelper
{
// Get the Name value of the Display attribute if the
// enum has one, otherwi u the value converted to title ca.
public static string GetDisplayName(this TEnum value)
讲一个神话故事where TEnum : struct, IConvertible
{
var attr = value.GetAttributeOfType();
return attr == null ? value.ToString().ToSpacedTitleCa() : attr.Name;
}
// Get the ShortName value of the Display attribute if the
/
/ enum has one, otherwi u the value converted to title ca.
public static string GetDisplayShortName(this TEnum value)
where TEnum : struct, IConvertible
{
var attr = value.GetAttributeOfType();
return attr == null ? value.ToString().ToSpacedTitleCa() : attr.ShortName;
}
///
/// Gets an attribute on an enum field value
///
/// The enum type
/
// The type of the attribute you want to retrieve
泪珠与珍珠/// The enum value
/// The attribute of type T that exists on the enum value
private static T GetAttributeOfType(this TEnum value)
where TEnum : struct, IConvertible
where T : Attribute
{
return value.GetType()
.GetMember(value.ToString())
.First()
.GetCustomAttributes(fal)
.
OfType()
.LastOrDefault();
}
}
这是⽤于转换为标题⼤⼩写的字符串的扩展⽅法:
///
/// Converts camel ca or pascal ca to parate words with title ca
///
///
///
public static string ToSpacedTitleCa(this string s)
{
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;托物言志诗
return textInfo
.ToTitleCa(Regex.Replace(s,
"([a-z](?=[A-Z0-9])|[A-Z](?=[A-Z][a-z]))", "$1 "));
}
#5楼
这应该做您需要的。
var enumType = typeof(FunkyAttributesEnum);
var memberInfos = enumType.GetMember(FunkyAttributesEnum.NameWithoutSpaces1.ToString()); var enumValueMemberInfo = memberInfos.FirstOrDefault(m => m.DeclaringType == enumType);
var valueAttributes =
enumValueMemberInfo.GetCustomAttributes(typeof(DescriptionAttribute), fal); var description = ((DescriptionAttribute)valueAttributes[0]).Description;

本文发布于:2023-08-03 13:01:20,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1106582.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:属性   获取   描述   扩展   字符串
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图