2015-01-01 29 views
0

我只是在看SignalR聊天應用程序,我不確定下面這行代表什麼意思?什麼是var toUser = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == toUserId);意思?

尤其是「x =>」部分。

var toUser = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == toUserId) ; 

然後它檢查變量併發送消息。

if (toUser != null && fromUser!=null) 
{ 
    "Send Message" 
} 
+1

上閱讀了['FirstOrDefault']( http://msdn.microsoft.com/en-us/library/vstudio/bb340482(v=vs.100).aspx)和[LINQ](https://code.msdn.microsoft.com/101-LINQ -Samples-3fb9811b)一般。 –

+0

請參閱[什麼是'=>'在C#(重複)](http://stackoverflow.com/questions/6429269/)和許多其他線程。 –

回答

3

x => x.ConnectionId == toUserIdlambda expression。這是宣佈anonymous delegate or method的一種非常簡潔的方式。同意本聲明

private bool SelectUser(User x) 
{ 
    return x.ConnectionId == toUserId; // Where toUserId has to be a field. 
} 

你可以寫:你可以代替寫這個

User toUser = ConnectedUsers.FirstOrDefault(SelectUser); 

注意,這裏沒有大括號()SelectUser後,因爲我們不想在這裏調用的方法做;我們通過它作爲代表。把它看作是一種方法指針。

還要注意,C#會自動捕獲lambda表達式中的變量toUserId,並使其對lambda表達式作爲字段可見。這被稱爲closure


ConnectedUsers枚舉其連接ID匹配,或nullextension methodFirstOrDefault返回第一用戶如果沒有這樣的用戶被找到(因此下面if (toUser != null ...)檢查。

0
var toUser = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == toUserId) ; 

返回一個有其特性的ConnectionId等於在你的「toUserId」變量值的第一個用戶,並將其置於至用戶。如果沒有匹配的用戶,toUserId將等於null。

閱讀http://msdn.microsoft.com/en-us/library/vstudio/bb340482%28v=vs.90%29.aspx更多細節

關於

if (toUser != null && fromUser!=null) { "Send Message" } 

我覺得如此簡單,我甚至無法知道該怎麼回答。如果你無法閱讀,我很抱歉,但你在錯誤的網站上。當你提供它時,它不會坦率地說任何事情:它不會編譯。所以請發佈一個真正的問題