我正在为应用程序使用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/