var toUser = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == toUserId) 是什么意思?意思是?

What does var toUser = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == toUserId) ; mean?

我正在查看 SignalR Chat 应用程序,我不确定以下行是什么意思?

尤其是“x =>”部分。

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

然后检查变量并发送消息。

if (toUser != null && fromUser!=null)
{
    "Send Message"
}
var toUser = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == toUserId) ;

returns ConnectionId 属性 的第一个用户等于您的 "toUserId" 变量中的值,并将其放入 toUser。如果没有匹配到的用户,toUserId将等于null。

阅读http://msdn.microsoft.com/en-us/library/vstudio/bb340482%28v=vs.90%29.aspx了解更多详情

关于

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

我觉得太简单了,我什至不知道该回答什么。如果您无法阅读它,我很抱歉,您访问了错误的网站。当你提供它时,坦率地说它没有做任何事情:它不会编译。所以请post一个真正的问题

x => x.ConnectionId == toUserId 是一个 lambda expression. This is a very concise way of declaring an 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.


extension method FirstOrDefault returns ConnectedUsers 枚举中连接 ID 匹配的第一个用户,或者 null 如果没有找到这样的用户(因此下面的 if (toUser != null ...) 检查。