【问题标题】:convert IEnumerable<WebSocketHandler> to WebSocketCollection将 IEnumerable<WebSocketHandler> 转换为 WebSocketCollection
【发布时间】:2016-03-25 10:37:15
【问题描述】:

我正在为一个应用使用Microsoft.Web.WebSockets

我有一组用户WebSocketCollection group;,我需要向除一个以外的所有人发送消息

 group.Except(group.Where(r=>((MicrosoftWebSockets)r).user_id==1)).Broadcast("Message");

但是当我使用 except 子句WebSocketCollection 变成IEnumerable&lt;WebSocketHandler&gt; 然后我不能使用广播方法。

任何其他方法都会有所帮助。

【问题讨论】:

  • 这项工作可以((WebSocketCollection)group.Except(group.Where(r=&gt;((MicrosoftWebSockets)r).user_id==1))).Broadcast("Message")
  • 我在强制转换时遇到此错误无法将类型“d__72`1[Microsoft.Web.WebSockets.WebSocketHandler]”的对象转换为类型“Microsoft.Web.WebSockets.WebSocketCollection”。

标签: c# asp.net-mvc websocket


【解决方案1】:

Broadcast 方法是在 WebSocketCollection 类上定义的。当您在 WebSocketCollection 上应用 LINQ 查询时,您会得到一个没有 Broadcast 方法的 IEnumerable&lt;WebSocketHandler&gt;

您可以创建一个新的WebSocketCollection,然后使用Add 方法添加各个项目,如下所示:

var handlers = group.Except(group.Where(r=>((MicrosoftWebSockets)r).user_id==1));

var collection = new WebSocketCollection();

foreach(var item in handlers)
{
    collection.Add(item);
}

collection.Broadcast("Message");

您可以将此逻辑包装到这样的扩展方法中:

public static class ExtentionMethods
{
    public static WebSocketCollection ToCollection(this IEnumerable<WebSocketHandler> handlers)
    {
        var collection = new WebSocketCollection();

        foreach (var item in handlers)
        {
            collection.Add(item);
        }

        return collection;
    }
}

并像这样使用它:

group.Except(group.Where(r=>((MicrosoftWebSockets)r).user_id==1))
.ToCollection()
.Broadcast("Message");

顺便说一句,您的 LINQ 查询可以通过否定这样的条件以更好的方式完成:

group.Where(r=> !(((MicrosoftWebSockets)r).user_id == 1))
.ToCollection()
.Broadcast("Message");

【讨论】:

  • 感谢您的回复,我确实想过迭代元素,但每次触发事件时在大组中迭代时不会影响性能
  • 您应该衡量性能影响。很可能它会被忽略。
  • 所以除了将它们设为 WebSocketCollection 之外,我还可以在循环本身中单独发送消息?
  • 是的。这也是一种选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多