Это неправильный способ сделать это, и похоже, что есть две основные концепции, с которыми у вас возникают проблемы, и понимание их поможет вам сделать это правильно.
Во-первых, s
переменная в вашем текущем классеConsoleColor.s
будет ссылаться на переменную s
в классе ConsoleColor
(он не имеет ее, следовательно, ваша ошибка).Это называется scope или encapsulation и позволяет нам повторно использовать общие слова / имена без конфликта.
Во-вторых, ваш код будет скомпилирован до его запуска,и ConsoleColor.s
(при условии, что такое было) больше не будет говорить ConsoleColor.s
.Вместо этого он будет указывать на место в памяти, где хранится значение, представляющее «s».s
, передаваемый вашему методу, будет строкой, такой как «Red» или «Blue».Нет связи между такой строкой и слотом в памяти для другого объекта для хранения его значений.
Чтобы сделать то, что вы пытаетесь сделать, вам нужно взять имя цвета и перевести его вцвет.Один из способов сделать это - выполнить серию операторов if
/ else
, проверяющих содержимое строки и назначающих соответствующий цвет, если он соответствует имени цвета.
К счастью, существует более простой способ.Вы можете просто разобрать строку в ConsoleColor
!
. Следуя примеру MSDN , вы можете сделать это:
Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), s);