c# – 有一个转换方法,需要一个char并生成一个ConsoleKey?
发布时间:2020-12-15 06:45:24 所属栏目:百科 来源:网络整理
导读:我想知道.NET框架(或其他地方)中是否有任何帮助类,它将字符转换为ConsoleKey枚举. e.g 'A' should become ConsoleKey.A 有人问我为什么要这样做.我想写一个需要一个字符串(例如“Hello World”)的帮助器,并将其转换为一系列ConsoleKeyInfo对象.我需要一些疯
我想知道.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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |