2017-03-16 100 views
1

我正在尝试制作一个基本程序,它将接收用户输入的一个字母并输出它的摩尔斯等效代码。我的问题是,程序似乎无法找到密钥。任何修复?请记住我正试图尽可能简单。c#从字典中获取值

Dictionary<string, string> values = new Dictionary<string, string>(); 
values.Add("A", ".-"); 
values.Add("B", "-..."); 
values.Add("C", "-.-."); 
// ... 
values.Add("8", "---.."); 
values.Add("9", "----."); 
values.Add("0", "-----"); 

Console.WriteLine("Pleae enter the value you wish to convert"); 
string translate = Console.ReadLine(); 
string translateupper = translate.ToUpper(); 
if (values.ContainsKey(translateupper) == true) 
{ 
    string Converted = (values["translateupper"].ToString()); 
    Console.WriteLine(Converted); 
} 
+0

请阅读[问]并提供[mcve],以及您的研究。不要显示,特别是不要研究你对错误的解释(“似乎无法找到密钥”),而是研究确切的异常消息。然后遍历代码并检查相关变量。 – CodeCaster

回答

5

删除周围的变量名引号:

string Converted = (values[translateupper].ToString()); 

注:

  • 字典项的值是字符串 - 你不需要将其转换为字符串。
  • 为了避免字典搜索条目两次,你可以使用TryGetValue方法
  • 使用驼峰名变量在C#
  • 使用字典初始化器提供初始值字典
  • 考虑使用Dictionary<char,string>因为你按键实际字符

与笔记记:

var values = new Dictionary<string, string> { 
     ["A"] = ".-", 
     ["B"] = "-...", 
     ["C"] = "-.-.", 
     // etc 
}; 

string translate = Console.ReadLine(); 
string converted; 
if (values.TryGetValue(translate.ToUpper(), out converted)) 
    Console.WriteLine(converted); 
// you can add 'else' block to notify user that translation was not found 

使用C#7.0,您可以声明变量。

+1

并使用静态字典 –