Как я могу заставить структуру получать переменную, которая не является системной переменной - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть структура для музыкальных заметок с именем MNote, но она принимает строки, то есть, когда я хочу сделать новую заметку, мне нужно набрать MNote S = "C#";

Можно ли как-нибудь сделать заметкипеременная, как системная переменная, поэтому я смогу набрать MNote S = C#; и C # будет распознан как MNote, а не как строка, которая помещается в MNote?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Как указано в ответе pm100 и в комментариях, enum является правильным инструментом для работы.Вышеупомянутый ответ иллюстрирует основное использование, но я хочу добавить две вещи, которые позволят вам приблизиться к возможности писать MNote S = C#;

Использовать буквы Unicode в ваших enum

Хотя это правда, что вы не можете использовать специальные символы в enum - с подчеркиванием _, являющимся единственным исключением, члены enum могут использовать буквы Unicode.Хотя вы не можете идеально имитировать символ #, вы можете довольно близко подойти к алфавиту Ogham .Письмо Огама Gort , номер Unicode U + 168C, выглядит следующим образом .

Таким образом, вы можете написать

public enum MusicalNotes
{
    C,
    Cᚌ,
    D,
    Dᚌ,
}

Воспользуйтесь using static директива в C # 6.0 и выше

Если вам не нравится писать что-то вроде var myNote = MusicalNotes.C, вы можете добавить директиву using static, чтобы решить эту проблему.

using static позволяет импортировать статические элементы.Поэтому, добавив using static MusicalNotes; к своим директивам, вы сможете написать var myNote = C;.

Конечный результат

var myNote = Cᚌ; - действительный код.

0 голосов
/ 14 декабря 2018

Используйте перечисление

public enum Notes
{
    C,
    CSharp,
    D,
    DSharp,
...
}

Теперь вы можете иметь

Notes n1 = Notes.C;
...
if(myNote == Notes.FSharp)
   ....

Примечание (извините за каламбур), у вас не может быть C#, поскольку вам не разрешены специальные символы в именах

И, конечно, вы можете сделать

class Composition
{
   List<Notes> noteArray;
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...