我想知道在.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());
}
答案 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;