C#在对集合进行值修改或者Remove(key)的时候不能使用Foreach,否则Count和索引会在循环的时候更改,可以使用for循环遍历。
int[] keyArray = userSockets.Keys.ToArray<int>();
for (int i = 0; i < keyArray.Length; i++)
{
if (socket == userSockets[keyArray[i]])
{
userSockets.Remove(keyArray[i]);
Console.WriteLine(keyArray[i] + "溜了");
}
}