C# 如何在c中遍历值字段为list的字典?

C# 如何在c中遍历值字段为list的字典?,c#,C#,我有需要在foreach循环中迭代的字典日,以便将其转换为字典日2; 我尝试使用下面的代码,但编译器不喜欢它,因为它无法转换为元素类型 foreach(KeyValuePair<string,IList<Days>> kvp in days) { //do stuff } 如何通过字典查找值为list的键值对? 如果可能的话,我会尽量避免使用linq使其更具可读性。您将字典定义为dictionary,这意味着您应该匹配foreach循环中的那些类型: foreach (

我有需要在foreach循环中迭代的字典日,以便将其转换为字典日2; 我尝试使用下面的代码,但编译器不喜欢它,因为它无法转换为元素类型

foreach(KeyValuePair<string,IList<Days>> kvp in days)
{
//do stuff
}
如何通过字典查找值为list的键值对?
如果可能的话,我会尽量避免使用linq使其更具可读性。

您将字典定义为dictionary,这意味着您应该匹配foreach循环中的那些类型:

foreach (KeyValuePair<Key, IList<Days>> kvp in days)
{
    foreach (Days day in kvp.Value)
    {
        // Convert individual elements
    }
}
您可以使用而不是精确地指定类型。这是使用var关键字完成的:

您还可以使用LINQ获得所需的字典:


将简单的ToString调用替换为要使用的天数到字符串转换。

如何定义变量天数?可以使用该方法执行转换。字典days@Robert问题是days的值IList days是枚举,但days2的IList是枚举。我有一个将字符串转换为天枚举的方法。DaysHelper.todaysenumstringfunc参数的lamba表达式中可以包含您的方法,如下面的答案所述。foreachKeyValuePair kvp in days这是我遇到编译器错误问题的部分。foreach不喜欢字典中有列表。不过使用var还是有效的。您仍然缺少foreach循环中的第二个“>”。我的错,这是一个输入错误。事实上,我在我的原始代码中确实有这样的代码,您仍然会得到编译错误。谢谢,我知道var,但出于某种原因,我没有考虑在这里使用它。它像魔法一样工作。我最终得到了2个foreach循环,其中一个循环迭代每个列表元素,然后用转换后的值将其保存到另一个列表中,然后在foreach内部完成后,我用键保存该循环并将其添加到转换列表中。
foreach(KeyValuePair<string,IList<Days>> kvp in days)
{
    IList<Days> dayList = kvp.Value;
    // TODO: convert and insert in new dictionary
}
foreach (var kvp in dict)
{

}
Dictionary<Key, IList<string>> dict2 =
    dict.ToDictionary(x => x.Key,
                      x => (IList<String>)x.Value.Select(y => y.ToString()).ToList());
foreach(KeyValuePair<string,IList<Days>> kvp in days)
{
    IList<Days> dayList = kvp.Value;
    // TODO: convert and insert in new dictionary
}