我想使用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();
我使用foreach
来迭代密钥并且密钥存在
foreach (var item in DoJob)
{
Console.WriteLine($"Item {item.Key} has Value {item.Value}");
}
但是当我想使用输入值访问密钥时,我得到异常
怎么了?
答案 0 :(得分:7)
Console.Read
返回字符代码,而不是实际值。
例如,如果您输入&#34; 1&#34;,Console.Read
将返回49。
您需要进行一些转换才能将所需的值检索为int:
var input = Console.Read();
var job = DoJob[CharUnicodeInfo.GetDecimalDigitValue((char)input)];
答案 1 :(得分:1)
Console.Read()返回输入流中下一个字符的int值,字符“1”的值不是1,因此是异常。
https://msdn.microsoft.com/en-us/library/system.console.read(v=vs.110).aspx
可以转换炭使用<击> Convert.ToInt32(输入)击> CharUnicodeInfo.GetDecimalDigitValue((char)的输入)到int由凯文在回答表明https://stackoverflow.com/a/44735459/7970673