如何使结构接收不是系统变量的变量

时间:2018-12-14 11:56:42

标签: c# struct

我有一个音符名称为MNote的结构,但是它带有字符串,这意味着当我要制作新音符时,我必须键入MNote S = "C#";

有什么方法可以使便笺成为类似于系统变量的变量,因此我将能够键入MNote S = C#;,并且C#将被识别为MNote而不是被压入字符串的MNote。 MNote?

2 个答案:

答案 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ᚌ,
}

在C#6.0及更高版本中利用using static directive

如果您不喜欢编写类似var myNote = MusicalNotes.C的内容,则可以添加using static指令来解决此问题。

using static允许您导入静态成员。因此,将using static MusicalNotes;添加到指令中,就可以编写var myNote = C;

最终结果

var myNote = Cᚌ;是有效代码。