字典中不存在给定的键。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'
转换成int49
:是的,我的错。我早些时候建议的修复方案是行不通的。因此,我更新了答案
var input = Console.Read();
var job = DoJob[CharUnicodeInfo.GetDecimalDigitValue((char)input)];