我想知道我是否可以分解这段代码:
ConsoleKey input = Console.ReadKey().Key;
if (input == up)
return Action.up;
if (input == down)
return Action.down;
if (input == left)
return Action.left;
if (input == right)
return Action.right;
return Action.none;
(动作是一个枚举(枚举动作{上,下,左,右,无})) 因为我重复近似相同的2行4次......
感谢阅读!
答案 0 :(得分:1)
你想做这样的事情;
Enum.TryParse<fun>(Console.ReadKey().Key.ToString(), out val)
示例;
using System;
namespace ConsoleApplication1
{
class Program
{
enum fun
{
None,
UpArrow,
DownArrow,
LeftArrow,
RightArrow
}
static void Main(string[] args)
{
fun val = fun.None;
Console.WriteLine("Start using your arrow key on your keyboard!");
do
{
if (val != fun.None)
{
Console.WriteLine(val);
}
}
while (Enum.TryParse<fun>(Console.ReadKey().Key.ToString(), out val));
Console.WriteLine("Invalid key bye bye");
Console.ReadKey();
}
}
}
答案 1 :(得分:1)
按如下方式定义枚举:
enum Action
{
Up = ConsoleKey.UpArrow,
Down = ConsoleKey.DownArrow,
Left = ConsoleKey.LeftArrow,
Right = ConsoleKey.RightArrow,
None = 0
}
代码可能如下所示:
ConsoleKey input = Console.ReadKey().Key;
var action = (Action)input;
if (!Enum.IsDefined(typeof(Action), action))
return Action.None;
else
return action;
答案 2 :(得分:0)
如果你想重构这种代码,可能看起来像这样: 如果带有一个switch语句的条件替换它会看起来像这样:
ConsoleKey input = Console.ReadKey().Key;
switch(input)
{
case "up":return Action.up;
break;
case "down":return Action.down;
break;
case "left":return Action.left;
break;
case "right":return Action.right;
break;
default:
return Action.none;
}
像这样你的代码更清洁。 注意:
对于少数项目,差异很小。如果你有很多物品,你一定要使用开关。