微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 有一个转换方法,需要一个char并生成一个ConsoleKey?

我想知道.NET框架(或其他地方)中是否有任何帮助类,它将字符转换为ConsoleKey枚举.
e.g 'A' should become ConsoleKey.A

有人问我为什么要这样做.我想写一个需要一个字符串(例如“Hello World”)的帮助器,并将其转换为一系列ConsoleKeyInfo对象.我需要一些疯狂的单元测试,我在嘲笑用户输入.

我只是有点厌倦了自己创建粘贴代码,所以我想,也许已经有一种方法来转换一个字符到一个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);
                                   }
                                   else if (c == ' ')
                                       return new ConsoleKeyInfo(' ',ConsoleKey.Spacebar,false);
                                   return (ConsoleKeyInfo?) null;
                               })
            .Where(info => info.HasValue)
            .Select(info => info.GetValueOrDefault());
    }

解决方法

你有没有尝试过:
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.

原文地址:https://www.jb51.cc/csharp/94755.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐