我正在使用Lidgren, 每次我创建新的消息类型时,我都需要编写相同类型的代码。我会创建一个NetOutgoingMessage
实例,对其进行各种分配调用,然后在完成后发送它。创建和发送是一样的,所以我想编写一个包装器来为我完成这个过程,但这是一个sealed
类,并且不是IDisposable
。我正在做的类似于:
NetOutgoingMessage om = server.CreateMessage();
om.Write(messageType);
om.Write(data1);
om.Write(data2);
server.SendMessage(om, server.Connections, NetDeliveryMethod.UnreliableSequenced, 0);
而我希望做类似于以下的事情:
using(AutoNetOutgoingMessage om(server, messageType, NetDeliveryMethod.UnreliableSequenced))
{
om.Write(data1);
om.Write(data2);
}
显然,我不能使用using
,那么是否有另一种常见的方式来实现这样的功能?我不想要一个非常复杂的解决方案,因为对我来说这只是关于可维护性的问题,所以我不介意为每个消息重复我的代码。但是我很好奇是否有我不知道的有趣的C#技巧可以实现这个。
using
。如果任何一个om.Write
调用导致异常,您将不希望调用server.SendMessage
。using
的重点是Dispose()
始终被调用,即使块中的代码的任何部分失败。(我现在看到这也已经在Cyral的答案评论中指出了。) - user743382