gpt4 book ai didi

c# - 为我自己的方法轻松使用 BitConverter.GetBytes 上存在的所有重载

转载 作者:行者123 更新时间:2023-11-30 23:15:09 25 4
gpt4 key购买 nike

在我的程序中,我有一个 PacketFactory,它构建准备好通过 NetworkStream 发送的缓冲区。正如您在下面看到的,此方法采用 short 作为参数。此短消息传递给 BitConverter.GetBytes

internal static class PacketFactory
{
internal static byte[] ToBuffer(PacketType type, short value)
{
byte[] packet = PacketTypeFactory.ToBuffer(type);
byte[] valueBytes = BitConverter.GetBytes(value);

byte[] buffer = new byte[packet.Length + valueBytes.Length];

Array.Copy(packet, 0, buffer, 0, packet.Length);
Array.Copy(valueBytes, 0, buffer, packet.Length, valueBytes.Length);

return buffer;
}
}

现在我的问题是: BitConverter.GetBytes 有 10 个重载。我想在 ToBuffer 方法中为我的 value 参数轻松使用所有这些重载。

简单的解决方案:创建所有同样存在于 BitConverter.GetBytes 上的重载,并将所有内容传递给内部方法。有没有更好的方法来解决这个问题?

internal static class PacketFactory
{
private static byte[] ToBuffer(PacketType type, byte[] value)
{
byte[] packet = PacketTypeFactory.ToBuffer(type);

byte[] buffer = new byte[packet.Length + value.Length];

Array.Copy(packet, 0, buffer, 0, packet.Length);
Array.Copy(value, 0, buffer, packet.Length, value.Length);

return buffer;
}

internal static byte[] ToBuffer(PacketType type, short value)
{
return ToBuffer(type, BitConverter.GetBytes(value));
}
internal static byte[] ToBuffer(PacketType type, int value)
{
return ToBuffer(type, BitConverter.GetBytes(value));
}
}

最佳答案

使用接受 Func 的通用方法:

internal static byte[] ToBuffer<T>(SocketType type, Func<T, byte[]> getBytes, T value)
{
byte[] packet = PacketTypeFactory.ToBuffer(type);
byte[] valueBytes = getBytes(value);

byte[] buffer = new byte[packet.Length + valueBytes.Length];

Array.Copy(packet, 0, buffer, 0, packet.Length);
Array.Copy(valueBytes, 0, buffer, packet.Length, valueBytes.Length);

return buffer;
}

然后这样调用它:

short shortValue = 5;
PacketFactory.ToBuffer(SocketType.Raw, BitConverter.GetBytes, shortValue);
// BitConverter.GetBytes(short)

int intValue = 10;
PacketFactory.ToBuffer(SocketType.Raw, BitConverter.GetBytes, intValue);
// BitConverter.GetBytes(int)

这样,BitConverter.GetBytes 的正确重载将传递给 ToBuffer

关于c# - 为我自己的方法轻松使用 BitConverter.GetBytes 上存在的所有重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42738423/

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