如何在 C# 中将双精度转换为枚举结构内的字符串
本文关键字:枚举 结构 字符串 转换 双精度 | 更新日期: 2023-09-27 17:57:20
这些都不起作用:
public enum OsVersioniOS : int
{
'8.0' = 1 << 0,
"8.1" = 1 << 1,
string(8.2) = 1 << 2,
}
我希望 8.0 [这是 iOS 操作系统的类型] 被视为枚举中的字符串。
这
是不可能的,枚举必须具有有效的 根据 C# 语言规范的标识符小节(C# 5.0 版本中的 2.4.2 小节),你能做的最好的事情就是使用一个DisplayAttribute
,根据你用来向用户显示信息的框架,它可能会也可能不会自动拾取。
public enum OsVersioniOS : int
{
[Display(ShortName="8.0")]
v8_0 = 1 << 0,
[Display(ShortName="8.1")]
v8_1 = 1 << 1,
[Display(ShortName="8.2")]
v8_2 = 1 << 2,
}
这是一个帮助程序扩展方法,如果您不使用将自动拉取 ShortName 的框架,则可以将枚举转换为其字符串描述。
/// <summary>
/// Gets the text from the <see cref="DisplayAttribute"/> ShortName associated with the enum member.
/// </summary>
/// <param name="value">The enum value to check.</param>
/// <returns>The value of the Display - ShortName attribute or null if not available.</returns>
public static string GetShortName(this Enum enumValue)
{
return enumValue.GetType()
.GetMember(enumValue.ToString())
.First()
.GetCustomAttribute<DisplayAttribute>()
.GetShortName();
}
这是不可能的,正确的方法是:
public enum OsVersioniOS
{
[Description("8.1")]
One,
[Description("8.2")]
Two
}
正如 Scott 和 Renato 所说,实现此目的的正确方法是使用属性来装饰要显示的信息的枚举。
public enum OsVersioniOS : int
{
[Display(Name="8.0")]
Version_8_0 = 1 << 0,
[Display(Name="8.1")]
Version_8_1 = 1 << 1,
[Display(Name="8.2")]
Version_8_2 = 1 << 2,
//etc.
}
定义这些属性后,可以通过反射从枚举中检索设置。例如:
{
OsVersioniOS enumMember = GetEnumThatYouNeedNameOf();
var type = typeof(OsVersioniOS);
var memberInfo = type.GetMember(enumMember.ToString());
var attribute = (DisplayAttribute)memberInfo[0].GetCustomAttributes(typeof(DisplayAttribute),false)
var value = attribute.Name;
return value;
}
如果您要经常使用它,我建议将其包装在扩展方法或静态帮助程序方法中。如果需要更多值,可以创建自己的属性,而不是使用"显示"或"说明"。