我有一个音符名称为MNote的结构,但是它带有字符串,这意味着当我要制作新音符时,我必须键入MNote S = "C#";
有什么方法可以使便笺成为类似于系统变量的变量,因此我将能够键入MNote S = C#;
,并且C#将被识别为MNote而不是被压入字符串的MNote。 MNote?
答案 0 :(得分:1)
使用枚举
public enum Notes
{
C,
CSharp,
D,
DSharp,
...
}
现在您可以拥有
Notes n1 = Notes.C;
...
if(myNote == Notes.FSharp)
....
请注意(打扰),您不能使用C#
,因为名称中不允许使用特殊字符
当然可以做到
class Composition
{
List<Notes> noteArray;
...
}
答案 1 :(得分:1)
正如pm100's answer和注释中所指出的,enum
是工作的正确工具。上面的答案说明了基本用法,但是我想补充两点,使您更加接近能够写MNote S = C#;
enum
中使用Unicode字母虽然确实不能在enum
中使用特殊字符–下划线_
是唯一的例外,但枚举成员可以使用Unicode字母。虽然您不能完美地模仿#
字符,但可以非常接近Ogham alphabet。奥格姆字母 Gort (Unicode码U + 168C)看起来像这样ᚌ
。
所以你可以写
public enum MusicalNotes
{
C,
Cᚌ,
D,
Dᚌ,
}
using static
directive 如果您不喜欢编写类似var myNote = MusicalNotes.C
的内容,则可以添加using static
指令来解决此问题。
using static
允许您导入静态成员。因此,将using static MusicalNotes;
添加到指令中,就可以编写var myNote = C;
。
var myNote = Cᚌ;
是有效代码。