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

时间:2015-01-01 18:14:49

标签: c#

我只是在看SignalR聊天应用程序,我不确定以下行是什么意思?

特别是“ x => ”部分。

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

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

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

2 个答案:

答案 0 :(得分: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


extension method FirstOrDefault返回连接ID匹配的ConnectedUsers枚举中的第一个用户,如果找不到此类用户,则返回null(因此,{{1}检查。

答案 1 :(得分:0)

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

返回第一个用户,其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" }

我发现它很简单,我甚至不知道该回答什么。如果你无法阅读它,我很抱歉,但你在错误的网站上。正如你提供的那样,坦率地说它没有任何作用:它不会编译。所以请发一个真实的问题