我只是在看SignalR聊天应用程序,我不确定以下行是什么意思?
特别是“ x => ”部分。
var toUser = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == toUserId) ;
然后检查变量并发送消息。
if (toUser != null && fromUser!=null)
{
"Send Message"
}
答案 0 :(得分:3)
x => x.ConnectionId == toUserId
是lambda 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" }
我发现它很简单,我甚至不知道该回答什么。如果你无法阅读它,我很抱歉,但你在错误的网站上。正如你提供的那样,坦率地说它没有任何作用:它不会编译。所以请发一个真实的问题