对一段代码进行分解

时间:2017-04-04 18:30:11

标签: c# enums

我想知道我是否可以分解这段代码:

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次......

感谢阅读!

3 个答案:

答案 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;

}

像这样你的代码更清洁。 注意:

对于少数项目,差异很小。如果你有很多物品,你一定要使用开关。