字典中不存在给定的键。c#

字典中不存在给定的键。c#,c#,dictionary,exception,C#,Dictionary,Exception,我想使用Dictionary和Action调用一些静态方法 这是我的密码: public class Works { public static void DoWorkA() { Thread.Sleep(1000); Console.WriteLine("Doing Work A"); } public static void DoWorkB() { Thread.Sleep(2000);

我想使用
Dictionary
Action
调用一些静态方法
这是我的密码:

public class  Works
{

    public static void DoWorkA()
    {
        Thread.Sleep(1000);
        Console.WriteLine("Doing Work A");
    }
    public static void DoWorkB()
    {
        Thread.Sleep(2000);
        Console.WriteLine("Doing Work B");
    }
    public static void DoWorkC()
    {
        Thread.Sleep(3000);
        Console.WriteLine("Doing Work C");
    }
}  
这是我的主要方法

 try
        {
            var DoJob = new Dictionary<int, Action>();
            DoJob.Add(1, () => Works.DoWorkA());
            DoJob.Add(2, () => Works.DoWorkB());
            DoJob.Add(3, () => Works.DoWorkC());

            var input = Console.Read();
            var job = DoJob[input];
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);

        }
        Console.ReadKey();  

但当我想使用输入值访问密钥时,我会得到异常

怎么了?

返回的是字符代码,而不是实际值

例如,如果键入“1”,则Console.Read将返回49

需要进行一些转换才能将所需的值检索为int:

var input = Console.Read();
var job = DoJob[CharUnicodeInfo.GetDecimalDigitValue((char)input)];    
Console.Read()返回输入流中下一个字符的int值,字符“1”的值不是1,因此出现异常


您可以使用convert.ToInt32(input)CharUnicodeInfo.GetDecimalDigitValue((char)input)将字符转换为int,正如Kevin在回答中所建议的那样

只是一个粗略的猜测,但我认为您使用的键不在字典中。
控制台。Read
返回
char
,例如“1”、“2”,“3”与
int
1,2不同,3@CodeCaster我把它读作
ReadLine
(即一个字符串),您认为这是一个编译错误。你的建议并不能解决这个问题,字符
'1'
转换成int
49
:是的,我的错。我早些时候建议的修复方案是行不通的。因此,我更新了答案
var input = Console.Read();
var job = DoJob[CharUnicodeInfo.GetDecimalDigitValue((char)input)];