我有一本字典,定义如下
Dictionary<int, List<int>> dict1 = new Dictionary<int, List<int>>();
我将有一个列表元素,我可以存储来自数据库的值
List<int> lstdbTaskID = new List<int>();
假设这有
100 105 110 200
分别
我将使用如下存储值的字典。假设我分别有2个密钥10,20,对于这个密钥值,我将得到10 i will have 100,105 and 110
and for 20 i will have 200
的值。
我想将这些值与可用列表lstdbTaskID
我试过这个
foreach (int strlst in lstdbTaskID)
{
if (dict1.ContainsValue(lstdbTaskID[strlst]))
}
但我得到的错误如下
'System.Collections.Generic.Dictionary&gt; .ContainsValue(System.Collections.Generic.List)'的最佳重载方法匹配'有一些无效的参数`
和
无法从'int'转换为'System.Collections.Generic.List'。
可以帮我解决这个问题吗?
答案 0 :(得分:2)
您的代码错误,因为您要将int
值与List
的{{1}}进行比较。
你的字典是:
int
Dictionary
int
List
{/ 1}}。{/ 1>
你有另一种结构
int
List
所以当你这样做时:
int
使用linq语句:
// Compiler fails here because you are trying to check whether dictionary contains
// the given integer value. Dictionary in this case has a list of integers as its `Value`
// in its `<Key,Value>` pair.
dict1.ContainsValue(lstdbTaskID[strlst])
编辑:如果你想要没有linq,请自行执行linq任务。
foreach (int strlst in lstdbTaskID)
{
if (dict1.Any(pair => pair.Value.Contains(strlst)))
{
// do something
}
}
答案 1 :(得分:1)
查看您在词典中存储的值的类型 - 它是List<int>
,不是 int
。因此,询问字典是否包含5的值是没有意义的,比方说。
但是,询问字典是否包含本身包含5的任何值(列表)确实有意义。
例如:
foreach (int strlst in lstdbTaskID)
{
if (dict1.Values.Any(list => list.Contains(strlst))
{
...
}
}
然而,这并不是一种非常有效的表达方式。目前尚不清楚最好的代表是,但不知道你将如何处理结果。例如,您可能只想要一个包含所有列表中所有值的HashSet<int>
- 但如果您想要返回其值包含特定ID的键,则这是另一回事。
编辑:在.NET 2.0版本中,您可以使用:
foreach (int strlst in lstdbTaskID)
{
foreach (List<int> list in dict1.Values)
{
if (list.Contains(strlst))
}
}
...但在这两种情况下,你真的没有使用字典作为字典......
答案 2 :(得分:0)
我完全理解你的问题时遇到了一些问题,但是,我的回答应该会把你推向正确的方向。因为您无法访问Linq(因为您使用的是.Net 2.0):
static bool IsContained(IEnumerable<int> lstdbTaskID, Dictionary<int, HashSet<int>> dict1)
{
foreach (int strlst in lstdbTaskID)
foreach (HashSet<int> value in dict1.Values)
if (value != null && value.Contains(strlst))
return true;
return false;
}
您应该使用HashSet<int>
,因为查找值要快得多(并且在.Net 2.0中受支持);但是,如果符合以下条件,则不应使用HashSet<int>
(而是使用List<int>
)
答案 3 :(得分:-1)
嗯,dict1是一本字典词典,而不是整数。因此dict1.ContainsValue
将字典作为参数 - 您正在检查它是否包含给定的字典。但是你给它一个int
。
试试这个:
if (dict1.Any(x => x.Value.ContainsValue(strlst))) // ...