我正在为应用程序使用Microsoft.Web.WebSockets

我有一个用户WebSocketCollection group;的集合,我需要向除每个用户之外的所有用户发送消息

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


但是,当我使用Except子句WebSocketCollection的时刻变为IEnumerable<WebSocketHandler>,然后我不能使用Broadcast方法。

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

最佳答案

Broadcast方法是在WebSocketCollection类上定义的。在WebSocketCollection上应用LINQ查询时,会得到一个没有IEnumerable<WebSocketHandler>方法的Broadcast

您可以创建一个新的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");

关于c# - 将IEnumerable <WebSocketHandler>转换为WebSocketCollection,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36218315/

10-09 08:39