Есть ли метод преобразования, который принимает char и создает ConsoleKey?
Интересно, есть ли какой-либо вспомогательный класс в .NET framework (или где-то еще), который преобразует символы в перечисления ConsoleKey.
e.g 'A' should become ConsoleKey.A
Прежде чем кто-нибудь спросит, почему я хотел бы это сделать. Я хочу написать помощник, который берет строку (например, "Hello World" ) и преобразует ее в последовательность объектов ConsoleKeyInfo. Мне нужно это для некоторых сумасшедших модульных тестов, где я издеваюсь над вводом пользователя.
Я просто немного устал от создания кода клея самостоятельно, поэтому я подумал, может быть, есть способ конвертировать char в перечисление ConsoleKey?
Для полноты здесь есть то, что пока работает отлично
public static IEnumerable<ConsoleKeyInfo> ToInputSequence(this string text)
{
return text.Select(c =>
{
ConsoleKey consoleKey;
if (Enum.TryParse(c.ToString(CultureInfo.InvariantCulture), true, out consoleKey))
{
return new ConsoleKeyInfo(c, consoleKey, false, false, false);
}
else if (c == ' ')
return new ConsoleKeyInfo(' ', ConsoleKey.Spacebar, false, false, false);
return (ConsoleKeyInfo?) null;
})
.Where(info => info.HasValue)
.Select(info => info.GetValueOrDefault());
}
Ответы
Ответ 1
Вы пробовали:
char a = 'A';
ConsoleKey ck;
Enum.TryParse<ConsoleKey>(a.ToString(), out ck);
Итак:
string input = "Hello World";
input.Select(c => (ConsoleKey)Enum.Parse(c.ToString().ToUpper(), typeof(ConsoleKey));
или
.Select(c =>
{
return Enum.TryParse<ConsoleKey>(a.ToString().ToUpper(), out ck) ?
ck :
(ConsoleKey?)null;
})
.Where(x => x.HasValue) // where parse has worked
.Select(x => x.Value);
Также Enum.TryParse()
имеет перегрузку для игнорирования случая.
Ответ 2
Если вы используете .NET4 или более позднюю версию, вы можете использовать Enum.TryParse
. и Enum.Parse
доступен для .NET2 и более поздних версий.
Ответ 3
Если это [A-Z] и [0-9] OP может использовать его
Это может сработать, потому что ConsoleKey является перечислением
чтобы вы могли сделать что-то вроде этого
char ch = 'A';
ConsoleKey ck = (ConsoleKey) ch;