using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
namespace NumberedMusicScores
{
public enum KeySignatures
{
C,
G,
D,
A,
E,
B,
FCress,
CCress,
F,
Bb,
Eb,
Ab,
Db,
Gb,
Cb
}
}
如果我使用它,我希望FCress
和CCress
显示为F#和C#。怎么做到这一点?
我试过这个:How to use ? character in an enum,但Description
中的[Description("F#")]
似乎不存在。 (用红线加下划线,如果我右键单击它,它甚至不显示任何“Resolve”。
更新:澄清:
enum
,而是配置为enum
的类。我想要enum
解决方案。谢谢。
答案 0 :(得分:8)
PCL框架不允许Description
属性。您可以创建该属性的简化版本。
public class MyDescription : Attribute
{
public string Description = { get; private set; }
public MyDescription(string description)
{
Description = description;
}
}
然后使用Thomas this thread的答案,执行此操作:
public static string GetDescription(this Enum value)
{
Type type = value.GetType();
string name = Enum.GetName(type, value);
if (name != null)
{
FieldInfo field = type.GetField(name);
if (field != null)
{
MyDescription attr =
Attribute.GetCustomAttribute(field,
typeof(MyDescription)) as MyDescription;
if (attr != null)
{
return attr.Description;
}
}
}
return null;
}
对于你的枚举:
public enum KeySignatures
{
//...
[MyDescription("F#")]
FCress,
[MyDescription("C#")]
CCress,
//...
}
答案 1 :(得分:1)
DescriptionAttribute是System.ComponentModel的一部分。
因此,如果您想将文本与枚举相关联,可以通过using System.ComponentModel;
答案 2 :(得分:0)
您可以使用System.ComponentModel.DescriptionAttribute指定您的Enum的描述,如下所示:
public enum KeySignatures
{
C,
G,
D,
[Description("F#")]
FCress,
[Description("C#")]
CCress,
//...
}
然后为Enum添加方法Description,如下:
public static class Util
{
public static string Description(this Enum value)
{
Type type = value.GetType();
string name = Enum.GetName(type, value);
if (name != null)
{
FieldInfo field = type.GetField(name);
if (field != null)
{
DescriptionAttribute attr =
Attribute.GetCustomAttribute(field,
typeof(DescriptionAttribute)) as DescriptionAttribute;
if (attr != null)
{
return attr.Description;
}
}
}
return value.ToString();
}
}