2010-10-21 6 views
2

Après avoir suivi un didacticiel, j'ai une table de hachage contenant un objet TcpClient correspondant à la chaîne d'un utilisateur connecté. Après avoir lu les avantages et les inconvénients d'une table de hachage, il a été recommandé d'utiliser un dictionnaire parce qu'il est générique, donc plus flexible. A partir de là, un tableau contenant les valeurs de la table de hachage, dans ce cas le TcpClient des utilisateurs, est créé. En bouclant le tableau de TcpClients, je peux obtenir le flux de chaque utilisateur et écrire un message sur leur écran.Impossible de copier le dictionnaire 'Valeur' ​​dans une liste - C#

Maintenant, si je tente de convertir le tableau contenant l'objet TcpClient pour chaque utilisateur, je reçois les erreurs suivantes:

La méthode la plus surchargée de match pour « System.Collections.Generic.Dictionary.ValueCollection.CopyTo (système .Net.Sockets.TcpClient [], int) » a des arguments invalides

argument 1: ne convertit pas 'System.Collections.Generic.List' à 'System.Net.Sockets.TcpClient []'

Ceci est le Dictiona objet ry:

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

Voici la liste que je crée:

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

C'est la méthode que je suis en train de suivre pour copier les valeurs à la liste:

htUsers.Values.CopyTo(tcpClients,0); 

Est Est-ce quelque chose qui ne peut pas être fait ou dois-je faire un simple changement?

Merci pour votre temps.

Répondre

8

La meilleure façon de résoudre ce problème serait de faire simplement:

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

Ou:

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

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

Les copies de méthode CopyTo dans un tableau, et non pas dans une liste.

+0

@Jamie: Oui. Il va générer la liste directement à partir des valeurs, puisque les valeurs implémente IEnumerable . J'ai édité pour ajouter une deuxième option (au cas où vous faites quelque chose d'autre avec la liste au milieu) –

+0

Merci! Je devrais probablement réalisé cela en regardant les déclarations d'erreur et la description d'IntelliSense. J'ai besoin de plus de café. –

2

CopyTo copie uniquement un tableau dans un tableau; Dans votre cas, vous essayez de copier un tableau dans une liste. Essayez ceci:

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

Notez que pour un grand nombre de cas (comme l'énumération), vous pouvez travailler directement sur le dictionnaire:

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

Merci pour le pourboire! =] –

Questions connexes