如何通过其中一个搜索三重元素(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>>'
我不确定您是如何获得确切的错误消息的。问题是 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;
当密钥不存在时,您仍然需要对这种情况进行一些错误处理。