从Dictionary>获取值时出现问题
本文关键字:int 问题 获取 List Dictionary | 更新日期: 2023-09-27 18:10:22
我有一个定义如下的字典
Dictionary<int, List<int>> dict1 = new Dictionary<int, List<int>>();
我将有一个列表元素,我可以存储来自数据库
的值List<int> lstdbTaskID = new List<int>();
假设它成立
100 105 110 200
。
我将我的字典的值存储如下。假设我分别有两个键10和20,对于这些键值,我将使用10 i will have 100,105 and 110
和and for 20 i will have 200
的值。
我想将这些值与可用的列表进行比较lstdbTaskID
I tried this
foreach (int strlst in lstdbTaskID)
{
if (dict1.ContainsValue(lstdbTaskID[strlst]))
}
但是我得到的错误如下
最好的重载方法匹配'System.Collections.Generic.Dictionary>.ContainsValue(System.Collections.Generic.List)'有一些无效参数'
和
有谁能帮我吗?不能从'int'转换为'System.Collections.Generic.List' '
您的代码是错误的,因为您试图将int
值与int
的List
进行比较。
你的字典是:int
的Dictionary
到int
的List
.
还有另一个结构asList
/int
所以当你这样做的时候:
// 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语句
foreach (int strlst in lstdbTaskID)
{
if (dict1.Any(pair => pair.Value.Contains(strlst)))
{
// do something
}
}
编辑:如果你不需要linq,请自己执行linq任务。
foreach (int strlst in lstdbTaskID)
{
foreach (int key in dict1.Keys)
{
if (dict1[key].Contains(strlst))
{
// do something
}
}
}
查看您在字典中存储的值的类型-它是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))
}
}
…但是你并没有把字典当作字典来使用在这里。
我完全理解你的问题有点小问题,但是,我的回答应该会把你推向正确的方向。鉴于您无法访问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>
),如果:
- 列表需要存储副本。
- -或-值的顺序很重要。
好吧,dict1是字典的字典,而不是整数。所以dict1.ContainsValue
接受一个字典作为参数——你检查它是否包含一个给定的字典。但是你给了它一个int
。
试试这个:
if (dict1.Any(x => x.Value.ContainsValue(strlst))) // ...