我有一个这样的词典。
public static Dictionary<int?, List<int?>> pegMap = new Dictionary<int?, List<int?>>();
现在我正在尝试检查字典中的列表是否包含某些值,其中字典键是某个值。
if (pegMap.Select(y => y.Value.Contains(disc)).Where(x => x.Equals(key)))
{
peg = (int)key;
}
但是编译器很生气并且给我一个错误 -
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<bool>' to 'bool'
我在这里做错了什么。请帮忙。
答案 0 :(得分:2)
听起来你完全无视你正在使用字典的事实。听起来你可能想要:
public bool CheckMap(int? key, int? checkValue)
{
List<int?> values;
if (!pegMap.TryGetValue(key, out values))
{
return false;
}
return values.Contains(checkValue);
}
答案 1 :(得分:1)
Where
会返回一个集合,而是要检查是否有Any
值满足x.Equals(key)
Dictionary<int?, List<int?>> pegMap = new Dictionary<int?, List<int?>>()
{
{ 1, new List<int?> {1,2,3} },
{ 2, new List<int?> {4,5,6} },
{ 3, new List<int?> {1,4,5} },
{ 4, new List<int?> {6,7,8} },
};
int? key = 2;
int? value = 4;
if (pegMap.Where(p => p.Key == key).Any(p => p.Value.Any(v => v == value)))
{
// returns true;
}
// You can also use
bool result = pegMap.ContainsKey(key) && pegMap[key].Contains(value);
答案 2 :(得分:1)
我认为Jon Skeet的回答效率更高,但如果lambda比其他任何东西都重要(喘气),你可以试试
pegMap.Any(x => x.Key == key && x.Value.Contains(disc))