Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过将字符串类型列表设置为字典来创建字典_C#_Linq_Dictionary - Fatal编程技术网

C# 通过将字符串类型列表设置为字典来创建字典

C# 通过将字符串类型列表设置为字典来创建字典,c#,linq,dictionary,C#,Linq,Dictionary,我正在尝试使用类型字符串(ProductID)列表创建此词典,但出现错误: 出错的部分是p=>p: 无法将类型“string”隐式转换为“System.Collections.Generic.IEnumerable” 这对我来说没有意义,因为p=>p使它成为可能,所以我将向第一个参数传递一个字符串,然后向第二个参数传递一个新的产品类别列表 Dictionary<string, IEnumerable<string>> missingProducts = produ

我正在尝试使用类型字符串(ProductID)列表创建此词典,但出现错误:

出错的部分是p=>p: 无法将类型“string”隐式转换为“System.Collections.Generic.IEnumerable”

这对我来说没有意义,因为p=>p使它成为可能,所以我将向第一个参数传递一个字符串,然后向第二个参数传递一个新的产品类别列表

Dictionary<string, IEnumerable<string>> missingProducts =
    productIds.ToDictionary<string, IEnumerable<string>>(
        p => p, p => p 
        new List<string>(productCategories));

ToDictionary
的第二个参数也是
Func
(第一个:键选择器,第二个:值选择器),因此您也必须传入
p

第二点:

字典丢失产品=
ProductID.ToDictionary(
p=>p,
p=>新列表(产品类别);

ToDictionary的第二个参数也是
函数(第一个:键选择器,第二个:值选择器),因此您也必须传入
p

第二点:

字典丢失产品=
ProductID.ToDictionary(
p=>p,
p=>新列表(产品类别);

我认为这两个参数都必须是谓词,例如:

Dictionary<string, IEnumerable<string>> missingProducts =
    productIds.ToDictionary<string, IEnumerable<string>>(
        p => p, 
        p = > new List<string>(productCategories));
字典丢失产品=
ProductID.ToDictionary(
p=>p,
p=>新列表(产品类别);
编辑:对于重复的答案,我深表歉意,我在键入此答案时错过了另一个答案,尽管我可能可以帮助您解决新问题,但为了避免给每个值提供相同的列表,您可以使用某种比较机制来断言“p”:

字典丢失产品=
ProductID.ToDictionary(
p=>p,
p=>productCategories.Where(category=>category{someOperationHere}p));
或者如果你有一些类别的主列表,我不知道你有什么,但是:

Dictionary<string, IEnumerable<string>> missingProducts =
    productIds.ToDictionary<string, IEnumerable<string>>(
        p => p, 
        p = > masterCategories.Where(category => p.categories.Contains(category)));
字典丢失产品=
ProductID.ToDictionary(
p=>p,
p=>masterCategories.Where(category=>p.categories.Contains(category));

我认为这两个参数都必须是谓词,例如:

Dictionary<string, IEnumerable<string>> missingProducts =
    productIds.ToDictionary<string, IEnumerable<string>>(
        p => p, 
        p = > new List<string>(productCategories));
字典丢失产品=
ProductID.ToDictionary(
p=>p,
p=>新列表(产品类别);
编辑:对于重复的答案,我深表歉意,我在键入此答案时错过了另一个答案,尽管我可能可以帮助您解决新问题,但为了避免给每个值提供相同的列表,您可以使用某种比较机制来断言“p”:

字典丢失产品=
ProductID.ToDictionary(
p=>p,
p=>productCategories.Where(category=>category{someOperationHere}p));
或者如果你有一些类别的主列表,我不知道你有什么,但是:

Dictionary<string, IEnumerable<string>> missingProducts =
    productIds.ToDictionary<string, IEnumerable<string>>(
        p => p, 
        p = > masterCategories.Where(category => p.categories.Contains(category)));
字典丢失产品=
ProductID.ToDictionary(
p=>p,
p=>masterCategories.Where(category=>p.categories.Contains(category));


显示完整的代码…看起来像您需要的:
missingProducts=productId.ToDictionary(p=>p,新列表(productCategories))
,但不确定什么是
productId
,如果它是一个
列表
,那么将所有ID分配给相同的产品类别可以实现什么。我怀疑productId是一个整数列表,在这种情况下,您需要p=>p.ToString()productId只是一个类型字符串列表,其中包含如下数字:“1”、“2”、“89”等等。因此,我不需要执行.ToString()。显示完整的代码…看起来您需要:
missingProducts=productId.ToDictionary(p=>p,new List(productCategories))
,但不确定什么是
productId
,如果它是一个
列表
那么,通过将所有ID分配给相同的产品类别,您可以实现什么呢?我怀疑ProductID是一个整数列表,在这种情况下,您需要p=>p。ToString()ProductID只是一个类型字符串列表,其中包含如下数字:“1”、“2”、“89”等等。因此,我不需要执行.ToString()。虽然这可以解决编译问题,但我很难在字典中找到每个键返回相同值的点。我完全同意。这可能是修复第二个表达式的开始,但问题中并没有太多内容。@JTunney这相当于您的VB版本。你可以在线将它粘贴到VB.NET到C#转换器中,得到相同的代码。你的错误是什么?你在括号里提到了一个p——在这个答案的代码里没有。啊哈!
ToDictionary
上的类型参数是
TSource,TKey
-。我建议您在推断它们时简单地删除它们。@JTunney这几乎是等效的,是的(它将是
字典
)。虽然仍然不确信每个产品都应该有相同的类别,但这在您的用例中可能是正确的。虽然这可以解决编译问题,但我很难在字典中找到每个键返回相同值的要点。我完全同意。这可能是修复第二个表达式的开始,但问题中并没有太多内容。@JTunney这相当于您的VB版本。你可以在线将它粘贴到VB.NET到C#转换器中,得到相同的代码。你的错误是什么?你在括号里提到了一个p——在这个答案的代码里没有。啊哈!
ToDictionary
上的类型参数是
TSource,TKey
-。我建议您在推断它们时简单地删除它们。@JTunney这几乎是等效的,是的(它将是
字典
)。虽然仍然不相信每个产品都应该有相同的类别,但在你的用例中可能是正确的。我知道vb很奇怪,但是你知道为什么我提出的版本在intellisense中没有错误吗?没有办法简单地转换c#的确切内容?productCategories是一个预先创建的硬编码列表,因此对于每个productId都是相同的。我完全根据代码更新了vb版本。它不会在intellisense中出错,因为
Dictionary<string, IEnumerable<string>> missingProducts =
    productIds.ToDictionary<string, IEnumerable<string>>(
        p => p, 
        p = > masterCategories.Where(category => p.categories.Contains(category)));