我的枚举结构是这个
public enum UserRole
{
Administrator = "Administrator",
Simple_User = "Simple User",
Paid_User = "Paid User"
}
现在我想通过使用名称假设
来读取此枚举值String str = UserRole.Simple_User;
它在str中给我“简单用户”而不是“Simple_User”
我们怎么做?
答案 0 :(得分:3)
您可以这样做一个友好的描述:
public enum UserRole
{
[Description("Total administrator!!1!one")]
Administrator = 1,
[Description("This is a simple user")]
Simple_User = 2,
[Description("This is a paid user")]
Paid_User = 3,
}
并制作辅助功能:
public static string GetDescription(Enum en)
{
Type type = en.GetType();
MemberInfo[] info = type.GetMember(en.ToString());
if (info != null && info.Length > 0)
{
object[] attrs = info[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attrs != null && attrs.Length > 0)
{
return ((DescriptionAttribute)attrs[0]).Description;
}
}
return en.ToString();
}
并使用它:
string description = GetDescription(UserRole.Administrator);
答案 1 :(得分:2)
好的,现在你知道enum确实是一个数字列表,你可以给出一个方便的字符串句柄:
public enum ErrorCode
{
CTCLSM = 1,
CTSTRPH = 2,
FBR = 3,
SNF = 4
}
另外,正如@StriplingWarrior所示,你可以通过获取枚举字符串名称和替换下划线来达到目前为止。但我认为你想要的是一种将一个好的人类字符串与每个值相关联的方法。怎么样?
public enum ErrorCode
{
[EnumDisplayName("Cataclysm")]
CTCLSM = 1,
[EnumDisplayName("Catastrophe")]
CTSTRPH = 2,
[EnumDisplayName("Fubar")]
FBR = 3,
[EnumDisplayName("Snafu")]
SNF = 4
}
好的,System.ComponentModel
中可能会有这样的事情 - 让我知道。我的解决方案的代码在这里:
[AttributeUsage(AttributeTargets.Field)]
public class EnumDisplayNameAttribute : System.Attribute
{
public string DisplayName { get; set; }
public EnumDisplayNameAttribute(string displayName)
{
DisplayName = displayName;
}
}
时髦的Enum扩展使其成为可能:
public static string PrettyFormat(this Enum enumValue)
{
string text = enumValue.ToString();
EnumDisplayNameAttribute displayName = (EnumDisplayNameAttribute)enumValue.GetType().GetField(text).GetCustomAttributes(typeof(EnumDisplayNameAttribute), false).SingleOrDefault();
if (displayName != null)
text = displayName.DisplayName;
else
text = text.PrettySpace().Capitalize(true);
return text;
}
为了获得人性化的价值,你可以做ErrorCode.CTSTRPH.PrettyFormat()
答案 2 :(得分:1)
嗯,枚举不能有字符串值。来自MSDN's Enum page:
枚举是一组命名常量,其基础类型是除Char之外的任何整数类型。
要获取枚举的字符串版本,请使用Enum的ToString方法。
String str = UserRole.Simple_User.ToString("F");
答案 3 :(得分:0)
我对你的问题感到有些困惑,因为C#不允许你声明由字符串支持的枚举。你的意思是想要获得“简单用户”,但你得到的是“Simple_User”吗?
怎么样:
var str = UserRole.Simple_User.ToString().Replace("_", " ");
答案 4 :(得分:0)
你可以通过属性来做到这一点,但实际上我认为使用这样的枚举可能是错误的方法。
我将创建一个公开显示名称属性的用户角色接口,然后为每个角色使用新类实现该接口,这也让您将来添加更多行为。 或者您可以使用抽象类,因此任何通用行为都不会重复...