我有一个enum
。我需要获取此enum
的小写字符串表示形式。有没有一种方法可以获取小写而不必先创建2个字符串,即enum.ToString().ToLower()
。有没有FormatProvider
我可以传递给ToString
来创建一个小写的字符串而已
答案 0 :(得分:0)
我认为,没有某种ToString()方法,就无法通过非字符串值使用String的ToLower()方法。 如果是语法问题,则可以将其作为扩展方法:
public static string ToLowerString(this YourEnum enumValue) => enumValue.ToString().ToLower();
并这样称呼:
YourEnum.SomeEnumValue.ToLowerString();
编辑。
由于OP表示他/她正试图避免开销,所以我猜Theodor(Dictionary<YourEnum, string>
)建议的Dictionary方法是更好的解决方案。
答案 1 :(得分:0)
您可以构建一个查找字典,在启动时(或第一次需要时)对其进行一次初始化,然后使用它来获取小写值:
public static Dictionary<TEnum, string> BuildEnumToStringMapping<TEnum>()
where TEnum: struct
{
if (!typeof(TEnum).IsEnum)
{
throw new ArgumentException("TEnum is not an enum.");
}
return Enum.GetValues(typeof(TEnum))
.OfType<TEnum>()
.ToDictionary(e => e, e => e.ToString().ToLower());
}
用法:
var lookup = BuildEnumToStringMapping<MyEnum>();
Console.WriteLine(lookup[MyEnum.Value]);
答案 2 :(得分:0)
没有很多方法可以实现此目的,因为您不希望使用两个字符串(使用ToString().ToLower()
的可能性将消失)。
我建议使用命名空间DescriptionAttribute
中的System.ComponentModel
。
将DescriptionAttribute
添加到枚举的每个成员。
public enum Items
{
[Description("item1")]
Item1 = 1,
[Description("item2")]
Item2 = 2,
}
然后在需要时使用Reflection
获得友好的小写字母名称。
public static string GetDescription(Enum en)
{
Type type = en.GetType();
MemberInfo[] memInfo = type.GetMember(en.ToString());
if (memInfo != null && memInfo.Length > 0)
{
object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attrs != null && attrs.Length > 0)
{
return ((DescriptionAttribute)attrs[0]).Description;
}
}
return en.ToString();
}
参考:查看this了解更多详细信息。