反向切换案例陈述

7 .net c# switch-statement

我想反转开关块里面的代码,而不是自己做(这对我来说似乎毫无意义)ex:

{            string name = Console.ReadLine();
             string s = null;
             for (int i = 0; i < name.Length; i++)
            {
                switch (name[i])
                {
                    case 'a':
                        s += '1';break;
                    case 'q':
                        s += '2'; break;
                 }
            }
}
Run Code Online (Sandbox Code Playgroud)

如何使其反转为这样:

                    case '1':
                        s += 'a';break;
                    case '2':
                        s += 'q'; break;
Run Code Online (Sandbox Code Playgroud)

我的代码包含每个字符超过30个语句.

Pat*_*man 2

为映射创建一个Dictionary<char, char>(实际上,出于性能原因和易用性,您可以创建两个),或带有自定义对象的简单列表类型(如List<Tuple<char, char>>)。您可以制定一种方法来使添加变得更容易。请注意,keyval必须是唯一的!

private void Add(char key, char val, Dictionary<char, char> dictionary, Dictionary<char, char> reverseDictionary)
{
    dictionary.Add(key, val);
    reverseDictionary.Add(val, key);
}
Run Code Online (Sandbox Code Playgroud)

然后使用这个:

Dictionary<char, char> dictionary = new Dictionary<char, char>();
Dictionary<char, char> reverseDictionary = new Dictionary<char, char>();

this.Add('a', '1', dictionary, reverseDictionary);

...

char outputChar;
if (dictionary.TryGetValue(inputChar, out outputChar))
{
    // use outputChar
}
Run Code Online (Sandbox Code Playgroud)

反之亦然:

char outputChar;
if (reverseDictionary.TryGetValue(inputChar, out outputChar))
{
    // use outputChar
}
Run Code Online (Sandbox Code Playgroud)