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



我正在尝试使用类型字符串列表(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)));

相关内容

  • 没有找到相关文章

最新更新