Мне нужно обработать ввод от пользователя в консольном приложении, и мне нужно разрешить только номера полей Z (..., -1, 0, 1, ...).
Я построил этот процесс символ за символом от пользователя, сохраняя последний символ, я могу проверить, что порядок правильный. в конце пользователь должен ввести набор чисел Z, например
-3 6 7 101 -500
.
Моя проблема заключается в сравнении LastInput
как enum
, что означает, что я хочу проверить, был ли последний ввод Numeric | Space | ...
, пожалуйста, посмотрите на код.
public void Foo()
{
ConsoleKeyInfo key;
var chars = new List<char>();
NextChar last = NextChar.Space;
var list = new List<NextChar> {last};
do
{
key = Console.ReadKey(true);
NextChar next = ProcessCharInput(key.KeyChar);
switch (next)
{
case NextChar.None:
if(key.Key != ConsoleKey.Enter)
{
return;
}
continue;
case NextChar.Space:
if (last == (NextChar.Numeric))
{
Console.Write(key.KeyChar);
last = next;
chars.Add(key.KeyChar);
}
break;
case NextChar.Minus:
if (last == (NextChar.Space))
{
Console.Write(key.KeyChar);
last = next;
chars.Add(key.KeyChar);
}
break;
case NextChar.Numeric:
if (last == (NextChar.Numeric | NextChar.Minus | NextChar.Space))
{
Console.Write(key.KeyChar);
last = next;
chars.Add(key.KeyChar);
}
break;
default:
throw new ArgumentOutOfRangeException();
}
}
while (true);
}
[Flags]
private enum NextChar
{
None = 0x0,
Space = 0x1,
Minus = 0x2,
Numeric = 0x4
}
Я предполагаю, что я делаю что-то не так с перечислением, потому что ввод Numeric
и последний Space
я не могу получить last == (NextChar.Numeric | NextChar.Minus | NextChar.Space)
, чтобы быть правдой.