我正在尝试使用类型字符串列表(productIds)创建此字典,但它出错:
出错的部分是 p => p: 无法将类型"字符串"隐式转换为"System.Collections.Generic.IEnumerable"
这对我来说没有意义,因为 p => p 使它成为它,所以我将一个字符串传递到第一个参数中,然后将一个新的产品类别列表传递到第二个参数中。
Dictionary<string, IEnumerable<string>> missingProducts =
productIds.ToDictionary<string, IEnumerable<string>>(
p => p, p => p
new List<string>(productCategories));
这是我尝试转换的 VB.NET 工作示例:
Dim productCategories As IList(Of String) = (From pc In prodCategories Select pc.CategoryName).ToList()
Dim missingProducts As Dictionary(Of String, IList(Of String)) = productIds.ToDictionary(Of String, IList(Of String))(Function(p) p, Function(p) New List(Of String)(productCategories))
ToDictionary
的第二个参数也是一个Func
(第一个:键选择器,第二个:值选择器),所以你也必须传入p
。
第二:电话ToDictionary
的签名是错误的:
Dictionary<string, IEnumerable<string>> missingProducts =
productIds.ToDictionary<string, string, IEnumerable<string>>(
p => p,
p => new List<string>(productCategories));
我相信这两个参数都需要是谓词,如下所示:
Dictionary<string, IEnumerable<string>> missingProducts =
productIds.ToDictionary<string, IEnumerable<string>>(
p => p,
p = > new List<string>(productCategories));
编辑:对于重复的答案,我错过了另一个,虽然我可以帮助您解决新问题,但为了避免给每个值相同的列表,您可以做某种比较机制来谓词"p"这样:
Dictionary<string, IEnumerable<string>> missingProducts =
productIds.ToDictionary<string, IEnumerable<string>>(
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)));