我需要在控制台应用程序中处理来自用户的输入,并且我只需要允许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)
为真。 最佳答案
您确定要尝试按位执行OR吗?
0100 OR 0010 OR 0001 = 0111
这似乎没有帮助。您似乎在这里尝试执行布尔逻辑。在这种情况下,您需要更改
last == (NextChar.Numeric | NextChar.Minus | NextChar.Space)
至
last == NextChar.Numeric || last == NextChar.Minus || last == NextChar.Space
...当然,说实话,如果您受制于一组4个值,并且试图确保对其中3个值进行处理,那么您可能会更清楚,更富有表现力
if(last != NextChar.None)