如何通过其中一个搜索三元素(key_value对字典) - IEnumerable错误

时间:2014-12-03 18:36:18

标签: c# dictionary

这是我的代码:

public class PairedKeys
{
    public byte Key_1 { get; set; }
    public byte Key_2 { get; set; }

    public PairedKeys(byte key1, byte key2)
    {
        Key_1 = key1;
        Key_2 = key2;
    }
}

public static class My_Class
{
    static Dictionary<PairedKeys, char> CharactersMapper = new Dictionary<PairedKeys, char>()
    {
        { new PairedKeys(128, 48), 'a' },
        { new PairedKeys(129, 49), 'b' }
    }
}

如何通过搜索CharactersMapper作为字符来获得Key_2的价值?

这是我的尝试:

byte b = 48;
char ch = CharactersMapper.Where(d => d.Key.Key_2 == b);

和错误:

  

Cannot apply indexing with [] to an expression of type 'System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<PairedKeys,char>>'

2 个答案:

答案 0 :(得分:1)

我不确定你是如何得到那个准确的错误信息的。问题是Where子句返回KeyValuePair,而不是char。以下单元测试通过并演示解决方案(首先必须将CharactersMapper静态变量更改为public):

[TestMethod]
public void Testing()
{
    byte b = 48;
    var item = My_Class.CharactersMapper
                       .Where(d => d.Key.Key_2 == b)
                       .FirstOrDefault();

    Assert.IsNotNull(item, "not found");

    char ch = item.Value;
    Assert.AreEqual('a', ch, "wrong value found");
}

答案 1 :(得分:1)

这有效

byte b = 48;
char ch = My_Class.CharactersMapper.First(d => d.Key.Key_2 == b).Value;

当密钥不存在时,您仍然需要对案例进行一些错误处理。