0

我有一个这样的字符串:

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() 返回默认值,而我返回的是“02250”而不是“#225#”。我没有# 符号的字典条目,因为它不对应于数字,但有没有办法修改或覆盖 .FirstOrDefault() 中的默认返回值,以便它在任何时候简单地返回 # 符号发生在我的输入字符串中?

4

2 回答 2

2

我会将其更改为使用 a Dictionary<char, char>,并用于TryGetValue轻松找出是否存在映射:

private static readonly Dictionary<char, char> PhoneMapping =
    new Dictionary<char, char>
{
    { 'A', '2' }, { 'B', '2' }, { 'C', '2' },
    { 'D', '3' }, { 'E', '3' }, { 'F', '3' },
    { 'G', '4' }, { 'H', '4' }, { 'I', '4' },
    { 'J', '5' }, { 'K', '5' }, { 'L', '5' }, 
    { 'M', '6' }, { 'N', '6' }, { 'O', '6' },
    { 'P', '7' }, { 'Q', '7' }, { 'R', '7' }, { 'S', '7' },
    { 'T', '8' }, { 'U', '8' }, { 'V', '8' },
    { 'W', '9' }, { 'X', '9' }, { 'Y', '9' }, { 'Z', '9' }
};

private static string ConvertLettersToPhoneNumbers(string letters)
{
    char[] replaced = new char[letters.Length];
    for (int i = 0; i < replaced.Length; i++)
    {
        char replacement;
        replaced[i] = PhoneMapping.TryGetValue(letters[i], out replacement)
            ? replacement : letters[i];
    }
    return new string(replaced);
}

请注意,对于您想要“第一个,但有默认值”的其他情况,您可以使用:

var foo = sequence.DefaultIfEmpty(someDefaultValue).First();
于 2013-03-07T05:08:05.950 回答
0

它的工作

protected void Page_Load(object sender, EventArgs e)
    {
        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);


        string value = "BAL";
        string nummber = "#";
        foreach (char c in value)
        {

            nummber += dictionary.FirstOrDefault(d => d.Key.Contains(c)).Value.ToString();
        }
        nummber += "#";

    }
于 2013-03-07T05:18:11.940 回答