【问题标题】:What does var toUser = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == toUserId) ; mean?var toUser = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == toUserId) 是什么意思?意思是?
【发布时间】:2015-01-02 05:53:16
【问题描述】:

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

尤其是“ x => ”部分。

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

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

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

【问题讨论】:

标签: c#


【解决方案1】:

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 methodFirstOrDefaultConnectedUsers 枚举中返回连接ID 匹配的第一个用户,如果没有找到这样的用户,则返回null(因此以下if (toUser != null ...) 检查。

【讨论】:

    【解决方案2】:
    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" }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 2015-03-24
      • 2016-11-12
      相关资源
      最近更新 更多