事实上,在你的情况下,我认为最合适的解决方案是:
[ProtoContract(SkipConstructor = true)]
class Settings
{
public Settings()
{
AccessCode = new byte[6];
Message = "hello";
Random r = new Random();
r.NextBytes(AccessCode);
}
[ProtoMember(1)]
public byte[] AccessCode { get; set; }
[ProtoMember(2)]
public string Message { get; set; }
}
但是
没有
指定
OverwriteList
这将避免额外的冗余初始化步骤。
解释
重写列表
:protobuf,由谷歌设计,设计为可追加和可合并。因此,对于多值数据(列表、数组等),规范行为是
追加
最后的新价值观;
重写列表
允许新值
代替
旧的——但另一种方法很简单:不要有任何旧的价值观。
作为一个无关的音符;
new Random()
可能导致混乱的场景,其中在紧密循环中创建的一组对象
完全相同的
价值观如果这可能是一个问题,请考虑使用
static
例如:
static readonly Random rand = new Random();
public Settings()
{
AccessCode = new byte[6];
Message = "hello";
lock(rand)
{
rand.NextBytes(AccessCode);
}
}