无法将字典'值'复制到列表 - C#

时间:2010-10-21 19:12:21

标签: c# list dictionary copy

按照教程我有一个哈希表,其中包含一个与连接用户的字符串匹配的TcpClient对象。在阅读了散列表的原理和缺点之后,建议使用字典是首选,因为它是通用的,因此更灵活。

从此处创建一个数组,其中包含哈希表中的值,在本例中为用户的TcpClient。通过循环TcpClients数组,我可以获得每个用户的流并将消息写入他们的屏幕。

现在,如果我尝试为每个用户转换持有TcpClient对象的数组,我会收到以下错误:

'System.Collections.Generic.Dictionary.ValueCollection.CopyTo(System.Net.Sockets.TcpClient [],int)'的最佳重载方法匹配有一些无效的参数

参数1:无法从'System.Collections.Generic.List'转换为'System.Net.Sockets.TcpClient []'

这是Dictionary对象:

public static Dictionary<string, TcpClient> htUsers = new Dictionary<string, TcpClient>();

这是我创建的列表:

List<TcpClient> tcpClients = new List<TcpClient>(); 

这是我试图将值复制到列表中的方法:

htUsers.Values.CopyTo(tcpClients,0);

这是不可能完成的事情,还是我需要做一个简单的改变?

感谢您的时间。

2 个答案:

答案 0 :(得分:9)

解决这个问题的最简单方法就是:

List<TcpClient> tcpClients = new List<TcpClient>(htUsers.Values);

或者:

List<TcpClient> tcpClients = new List<TcpClient>();

// Do things with list...
tcpClients.AddRange(htUsers.Values);

CopyTo方法复制到数组中,而不是复制到列表中。

答案 1 :(得分:2)

CopyTo只将数组复制到数组中;在您的情况下,您正在尝试将数组复制到列表中。试试这个:

List<TcpClient> tcpClients = htUsers.Values.ToList();

请注意,对于很多情况(例如枚举),您可以直接在字典上工作:

foreach (var kvp in htUsers) {
    string user = kvp.Key;
    TcpClient client = kvp.Value;
    // do something
}