11

charsをConsoleKey列挙型に変換するヘルパークラスが.NETFramework(または他の場所)にあるのではないかと思います。

e.g 'A' should become ConsoleKey.A

誰かがなぜ私がそれをしたいのかと尋ねる前に。文字列(「HelloWorld」など)を取得して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());
    }
4

3 に答える 3

9

やってみました:

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()あります。

于 2012-07-15T20:03:15.937 に答える
1

.NET4以降を使用している場合は、を使用できますEnum.TryParseEnum.Parse.NET2以降で使用できます。

于 2012-07-15T20:10:34.640 に答える
0

[AZ]&[0-9]ならOPで使えます

ConsoleKeyは列挙型であるため、機能する可能性があります

だからあなたはこのような何かをすることができます

char ch = 'A';
ConsoleKey ck = (ConsoleKey) ch;
于 2012-07-15T20:01:16.477 に答える