What does var toUser = ConnectedUsers.FirstOrDefault(x =>

本文关键字:gt ConnectedUsers does var toUser What FirstOrDefault | 更新日期: 2023-09-27 18:35:46

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

特别是"x =>"部分。

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

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

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

What does var toUser = ConnectedUsers.FirstOrDefault(x =>

x => x.ConnectionId == toUserId是一个lambda表达式。这是声明匿名委托或方法的一种非常简洁的方法。你可以这样写:

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 表达式可见。这称为闭包。


扩展方法FirstOrDefault返回连接 ID 匹配的ConnectedUsers枚举中的第一个用户,如果未找到此类用户,则返回null(因此以下if (toUser != null ...)检查)。

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" }

发现它是如此简单,以至于我什至不知道该回答什么。如果您无法阅读它,很抱歉,但您在错误的网站上。当你提供它时,它不会做任何事情来坦率地说:它不会编译。所以请发布一个真实的问题