按照教程我有一个哈希表,其中包含一个与连接用户的字符串匹配的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);
这是不可能完成的事情,还是我需要做一个简单的改变?
感谢您的时间。
答案 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
}