是否有转换方法接受char并生成ConsoleKey?

时间:2012-07-15 19:52:46

标签: c# .net

我想知道在.NET框架(或其他地方)中是否有任何帮助类将字符转换为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());
    }

3 个答案:

答案 0 :(得分:8)

你试过了吗?

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()还有an overload to ignore case

答案 1 :(得分:1)

如果您使用的是.NET 4或更高版本,则可以使用Enum.TryParse。并且Enum.Parse可用于.NET 2及更高版本。

答案 2 :(得分:0)

  

如果是[A-Z]&amp; [0-9] OP可以使用它

它可能有效,因为ConsoleKey是enumeration

所以你可以像这样做

char ch = 'A';
ConsoleKey ck = (ConsoleKey) ch;