2014-02-22 124 views
0

我有一個小字典的問題。C#獲取字典類值

這裏是有點代碼:

string user = UserList 
    .Where(p => p.Key == im.SenderConnection.RemoteUniqueIdentifier) 
    .Select(p => p.Value.Username) 
    .ToString(); 
Console.WriteLine(user); 

public class User 
{ 
     public string Username; 
} 

這寫入控制檯:

System.Linq.Enumerable + WhereSelectEnumerableIterator2 [System.Collections.Generic.KeyValuePair2 [System.Int64,的ChatServer 。用戶],System.String]

+0

所有的答案似乎假設你想要檢索一個名稱,並打印到控制檯。是這種情況,還是你期望打印到控制檯會自動迭代多個用戶的查詢? –

+2

如果'UserList'是'Dictionary',爲什麼不簡單'UserList [im.SenderConnection.RemoteUniqueIdentifier] .UserName'? –

+0

大聲笑忘記它:D – user3290224

回答

2

因爲您對Select的結果致電ToString

Select是一個投影..因此,它仍然返回一個集合。你應該叫FirstOrDefault並檢索名稱:

string user = UserList 
    .Where(p => p.Key == im.SenderConnection.RemoteUniqueIdentifier) 
    .Select(p => p.Value.Username) 
    .First(); 

Console.WriteLine(user); 

或更短:

string user = UserList 
    .First(p => p.Key == im.SenderConnection.RemoteUniqueIdentifier) 
    .Value.Username; 
+0

作爲一個說明,第二個將返回整個行從源頭與第一個只會帶回一列。 –

+0

謝謝!工作正常 :) – user3290224

1

嘗試此

string user = UserList.Where(p => p.Key == im.SenderConnection.RemoteUniqueIdentifier).Select(p => p.Value.Username).FirstOrDefault().ToString(); 

您正在選擇過濾的UserList,而不是特定的用戶。將您的過濾器添加到FirstOrDefault以獲取特定用戶。