C# 中存在的 extraction/insertion 运算符重载的类似替代方案存在于 C++ 中

Similar alternative to extraction/insertion operator overloading in C# that exists in C++

我目前正在为 C# 项目开发数据包 class。

在我的数据包 class 的 C++ 版本中,我有提取和插入运算符,因此可以像这样在尽可能少的行中构建具有多个 integers/strings/etc 的数据包。

std::shared_ptr<Packet> p = std::make_shared<Packet>(PacketType::Test); //Create packet of type (Test)
*p << 3 << "John" << "Hates" << "Susan"; //append data to packet
myConn.SendPacket(p); //queue packet to be sent

我想弄清楚是否有一种方法可以在 C# 中获得类似的功能,或者我是否真的会被迫为从数据包 to/extracted 提供的每条数据单独一行.

在 C# 中,我想象等效项看起来像这样...

Packet p = new Packet(PacketType::Test); //Create packet of type (Test)
p.Append(3); 
p.Append("John"); 
p.Append("Hates");
p.Append("Susan");
myConn.SendPacket(p); //queue packet to be sent

有什么方法可以在不影响性能的情况下减少代码行数?我不想将数据填充到字符串中。我希望它保留为二进制数据。

您可以像下面这样定义您的 Append 方法:

public void Append(params object[] args)
{
    // todo: save your args here
}

params 关键字将允许您添加任意数量的参数(就像在 printf 函数中一样)。用法是:

Packet p = new Packet(PacketType::Test); //Create packet of type (Test)
p.Append(3, "John", "Hates", "Susan");
myConn.SendPacket(p); //queue packet to be sent