Невозможно скопировать словарь 'Value' в список - C # - PullRequest
2 голосов
/ 21 октября 2010

После изучения у меня есть хеш-таблица, которая содержит объект 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 ]

9 голосов
/ 21 октября 2010

Самый простой способ исправить это - просто сделать:

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

Или:

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

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

Метод CopyTo копирует в массив, а не в список.

2 голосов
/ 21 октября 2010

CopyTo только копирует массив в массив; в вашем случае вы пытаетесь скопировать массив в список. Попробуйте вместо этого:

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

Обратите внимание, что во многих случаях (например, перечисление) вы можете работать непосредственно со словарем:

foreach (var kvp in htUsers) {
    string user = kvp.Key;
    TcpClient client = kvp.Value;
    // do something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...