gpt4 book ai didi

c# - 将 IEnumerable 转换为 WebSocketCollection

转载 作者:太空宇宙 更新时间:2023-11-03 23:18:45 24 4
gpt4 key购买 nike

我正在使用 Microsoft.Web.WebSockets对于一个应用程序。

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

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

但是我使用 Except 子句的那一刻 WebSocketCollection变成 IEnumerable<WebSocketHandler>然后我不能使用广播方法。

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

最佳答案

Broadcast方法在 WebSocketCollection 上定义类(class)。在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com