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

本文关键字:value key 元素 字典 错误 IEnumerable 三重 何通过 搜索 一个 | 更新日期: 2023-09-27 18:33:04

这是我的代码:

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' }
    }
}

如何通过将Key_2作为字符进行搜索来获取CharactersMapper值?

这是我的尝试:

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>>'

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

我不确定您是如何获得确切的错误消息的。问题是 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");
}

这有效

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

当密钥不存在时,您仍然需要对这种情况进行一些错误处理。