我正在尝试使用类型字符串列表(productIds)创建此字典,但它是错误的:
错误的部分是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))
答案 0 :(得分:6)
ToDictionary
的第二个参数也是Func
(第一个:键选择器,第二个:值选择器),因此您也必须传入p
。
第二:signature of the call to ToDictionary
is wrong:
Dictionary<string, IEnumerable<string>> missingProducts =
productIds.ToDictionary<string, string, IEnumerable<string>>(
p => p,
p => new List<string>(productCategories));
答案 1 :(得分:1)
我认为这两个论点都必须是谓词:
Dictionary<string, IEnumerable<string>> missingProducts =
productIds.ToDictionary<string, IEnumerable<string>>(
p => p,
p = > new List<string>(productCategories));
编辑:我为重复的答案道歉,我在输入这个时错过了另一个,虽然我可能能够帮助你解决新问题,避免给每个值列出相同的列表,你可以做一些一种比较机制来预测&#34; p&#34;就这样:
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)));