2010-10-21 58 views
2

遵循教程我有一個哈希表,其中包含與連接用戶的字符串匹配的TcpClient對象。在閱讀散列表的贊成和反對之後,建議使用字典,因爲它是通用的,因此更靈活。不能將字典'值'複製到列表中 - C#

從這裏開始創建一個數組,其中包含哈希表中的值,在這種情況下是用戶的TcpClient。通過循環TcpClients數組,我可以獲取每個用戶的流並在其屏幕上寫入消息。

現在,如果我嘗試和轉換陣列持有的TcpClient對象爲每個用戶出現以下錯誤:

爲「System.Collections.Generic.Dictionary.ValueCollection.CopyTo的最佳重載的方法匹配(系統.Net.Sockets.TcpClient [],INT)」具有一些無效參數

參數1:不能從轉換 'System.Collections.Generic.List' 到 'System.Net.Sockets.TcpClient []'

這是Dictiona RY對象:

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

這是我創建的列表:

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

這是我想遵循的值複製到列表的方法:

htUsers.Values.CopyTo(tcpClients,0); 

是這是不能做的或者我需要做一個簡單的改變?

謝謝你的時間。

回答

8

解決這一問題將只是做最簡單的方法:

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

或者:

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

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

CopyTo方法複製到一個數組,而不是到一個列表。

+0

@Jamie:是的。它會直接從值中生成列表,因爲這些值實現了IEnumerable 。我編輯添加第二個選項(如果你正在做的東西與中間名單) – 2010-10-21 19:17:53

+0

謝謝!我可能應該意識到,在查看錯誤語句和IntelliSense描述時。我需要更多咖啡。 – 2010-10-21 19:19:17

2

CopyTo只將數組拷貝到數組;在你的情況下,你試圖將一個數組複製到一個列表中。試試這個:

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

注意,對於很多情況下(比如枚舉),你可以直接在字典中的工作:

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

謝謝你的提示! =] – 2010-10-21 19:22:29