簡體   English   中英

無法將字典'值'復制到列表 - C#

[英]Cannot copy Dictionary 'Value' to a List - C#

遵循教程我有一個哈希表,其中包含一個與連接用戶的字符串匹配的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);

這是不可能完成的事情還是我需要進行簡單的改變?

謝謝你的時間。

解決這個問題最簡單的方法就是:

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

要么:

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

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

CopyTo方法復制到數組中,而不是復制到列表中。

CopyTo僅將數組復制到數組中; 在您的情況下,您正在嘗試將數組復制到列表中。 試試這個:

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

請注意,對於很多情況(例如枚舉),您可以直接在字典上工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM