如果数组正好是 16 个字节并且取自成功接收的 UDP 套接字,则新的 Guid(byte[]) 是否始终生成有效的 g

本文关键字:byte Guid 是否 有效 套接字 字节 数组 正好是 UDP 如果 成功 | 更新日期: 2023-09-27 17:57:08

试图围绕由Socket.ReceiveFrom(Byte[],EndPoint)生成的字节数组,后来在Guid Constructor(Byte[])中使用。

var data = new byte[16];
var length = socket.ReceiveFrom(data, ref remoteEndpoint);
if(length == 16)
    var guid = new Guid(data);

是否可以安全地假设,如果socket.ReceiveFrom(...)没有产生异常,new Guid(data)永远不会失败?基本上,ReceiveFrom 是否有可能在不引发异常的情况下生成无法制作成 guid 的字节数组?还是我必须首先验证收到的字节数组?

如果数组正好是 16 个字节并且取自成功接收的 UDP 套接字,则新的 Guid(byte[]) 是否始终生成有效的 g

这与数据的来源无关。Guid如何知道数据来自套接字?

任何字节都是有效的 Guid,至少对于Guid使用的验证规则而言。此代码永远不会抛出:

if(length == 16)
    var guid = new Guid(data);

根据某些 Guid 标准,我相信 Guid 确实有一些结构,但代码几乎从未使用过这种结构。它没有实际影响。我不知道有哪个系统会给出结构不良的指导,行为不端。