次のような文字列があります。
string ussdCommand = "#BAL#";
それを「#225#」に変換したいと思います。現時点では、次のように定義された辞書があります。
Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary.Add("ABC", 2);
dictionary.Add("DEF", 3);
dictionary.Add("GHI", 4);
dictionary.Add("JKL", 5);
dictionary.Add("MNO", 6);
dictionary.Add("PQRS", 7);
dictionary.Add("TUV", 8);
dictionary.Add("WXYZ", 9);
そして、元の文字列 ("#BAL#") を受け取り、次のように変換する関数があります。
private static string ConvertLettersToPhoneNumbers(string letters)
{
string numbers = string.Empty;
foreach (char c in letters)
{
numbers += dictionary.FirstOrDefault(d => d.Key.Contains(c)).Value.ToString();
}
return numbers;
}
すぐに気付くと思いますが、問題は、辞書に「#」のエントリが含まれていないため、.FirstOrDefault() がデフォルト値を返し、「#225#」ではなく「02250」が返されることです。# 記号は数値に対応していないため、辞書のエントリはありませんが、.FirstOrDefault() のデフォルトの戻り値を変更またはオーバーライドして、発生したときに # 記号を返すだけにする方法はありますか?私の入力文字列で?