代码之家  ›  专栏  ›  技术社区  ›  Jamie Keeling

无法将字典“Value”复制到列表-C#

  •  2
  • Jamie Keeling  · 技术社区  · 14 年前

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

    现在,如果我尝试为每个用户转换包含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 回复  |  直到 14 年前
        1
  •  9
  •   Reed Copsey    14 年前

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

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

    或:

    List<TcpClient> tcpClients = new List<TcpClient>();
    
    // Do things with list...
    tcpClients.AddRange(htUsers.Values);
    

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

        2
  •  2
  •   kevingessner    14 年前

    CopyTo

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

    注意,对于很多情况(例如枚举),可以直接使用字典:

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