这是我的代码:
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>>'
答案 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;
当密钥不存在时,您仍然需要对案例进行一些错误处理。