初学者 C# Linq:在字典中循环遍历 kvp<>
本文关键字:遍历 循环 kvp 字典 Linq 初学者 | 更新日期: 2023-09-27 18:31:16
>这是吗
foreach (KeyValuePair<string, int> kvp in myDic.Select(x => x).ToList())
{
}
而这个
foreach (KeyValuePair<string, int> kvp in myDic.ToList())
{
}
一样?
我看到这段代码,很困惑。"选择(x => x)部分只是为了方便,以便以后可以变成(x => x != 0)之类的东西吗?
它们完全相同,因为
Select.(x => x)
将只返回初始列表。
想象一下x是Client
的实例,您将编写运输代码并且只需要客户端地址。
然后你会去
Select.(x => x.Address)
这将返回一个List<Address>
而不是List<Client>
因此将您的方法与Client
类分离(为什么 shipping 会关心客户本身,它只需要地址)
Select(x => x)
并没有真正的区别。但是,ToList()
会从集合创建一个新列表。这与在循环内修改myDic
的情况下@NikolaiDante答案不同。
例:
// working fine
foreach (KeyValuePair<string, int> kvp in myDic.ToList())
{
if (kvp.Value == 0) myDic.Remove(kvp.Key);
}
// throwing exception on Remove
foreach (KeyValuePair<string, int> kvp in myDic)
{
if (kvp.Value == 0) myDic.Remove(kvp.Key);
}
是的。这是一个可运行的小提琴。
此外
foreach (KeyValuePair<string, int> kvp in myDic)
{
}
也可以工作,因为您不需要.ToList() 来迭代字典。
是的,它们产生的结果完全相同
但是,您可以使用:
foreach (var item in myDic)
{
}
因为字典实现了IEnumerable,因此您可以迭代它
您编写的 2 种方式只是增加了将词典转换为另一个集合的不必要的工作