如何编写带#字符的enum
本文关键字:enum 字符 何编写 | 更新日期: 2023-09-27 18:08:47
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#。如何做到这一点?
我试过了:怎么用?字符,但[Description("F#")]
中的Description
似乎不存在。(用红线下划线,如果我右键单击它,它甚至没有显示任何"Resolve"。
更新:澄清:
- 这不是一个副本。因为duplicate answer不是
- 如果不可能,那么请回答"it's not possible",而不是标记为重复。
- 在我发表这篇文章之前我已经读过了。
enum
,而是一个被配置为enum
的类。我想要enum
解决方案。谢谢。
PCL框架不允许Description
属性。您可以创建该属性的简化版本。
public class MyDescription : Attribute
{
public string Description = { get; private set; }
public MyDescription(string description)
{
Description = description;
}
}
然后使用Thomas的回答从这个线程,这样做:
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;
}
对于你的enum:
public enum KeySignatures
{
//...
[MyDescription("F#")]
FCress,
[MyDescription("C#")]
CCress,
//...
}
DescriptionAttribute是System.ComponentModel的一部分。
如果要将文本与enum关联,可以通过using System.ComponentModel;
你可以使用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();
}
}