我需要一个恰好有 X 字节的小数据类型。
为了存档这个我基本上有两种方法:
我已经看到在很多结构中使用了Guid或MongoDb 的 ObjectId具体字段,即使它们或多或少只是一个普通的字节数组。
public struct XY
{
private readonly int _a;
private readonly int _b;
private readonly int _c;
}
Run Code Online (Sandbox Code Playgroud)
与
public struct XY
{
private readonly byte[] bytes = new byte[12]; // probably set via ctor
}
Run Code Online (Sandbox Code Playgroud)
这是否提供了任何显着的好处(除了可用性之外)?
或者换句话说:在结构中使用字节数组是一个坏主意吗?
普通字段最常在结构中使用的原因是它们将作为结构的一部分存储。因此,如果我有一个Guid[],那么所有数据都将存储在一个连续的内存块中。这对于数据局部性和内存使用有好处。
如果您存储数组,您的结构将仅包含单个引用,而实际数据将存储在其他地方,并且访问数据需要间接。这并不意味着您永远不应该将数组存储为结构的一部分,但如果您需要大小不同的数据或其他特殊需求,那么这是最有益的。
对于固定大小的小数据,使用单独的字段可能更好。如果您想将字段视为值序列,您始终可以实现 IEnumerable/IReadOnlyCollection/IReadOnlyList。