2017-03-16 9 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

[ask]を読んで、あなたの研究と一緒に[mcve]を提供してください。表示しないでください。特に、エラーの解釈を調べないでください(「キーを見つけることができません」)が、正確な例外メッセージを調べます。次にコードをステップ実行し、関連する変数を調べます。 – CodeCaster

答えて

5

変数名の前後に引用符を削除します。

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

注:辞書エントリの

  • 値が文字列である - あなたはそれを文字列に変換する必要はありません。
  • 辞書のエントリを検索する2回を回避するには、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

静的な辞書を使用する –

関連する問題