在我的项目中,我不仅需要时间,还需要有关UTC偏移的信息。因此我考虑使用DateTimeOffset
类。
我没有做任何魔术,只是宣布struct
包含short
的偏移量和long
的刻度线(与DateTimeOffset
相同) - 当然还有{ {1}}和ProtoContract
属性。
但是:即使没有初始化这个值(两个字段都为零),线上还有2个额外的字节(我用ProtoMember
进行了交叉检查)!
我尝试继承class
并设置我的默认值 - 但也无济于事。
原因是protobuf-net按名称(DefaultValueAttribute
)检查DefaultValueAttribute
。
MetaType.ApplyDefaultBehaviour(bool isEnum, ProtoMemberAttribute normalizedAttribute)
但即使我改变了这一点,我也会在if ((attrib = GetAttribute(attribs, "System.ComponentModel.DefaultValueAttribute")) != null)
{
object tmp;
if(attrib.TryGet("Value", out tmp)) defaultValue = tmp;
}
抱怨中得到例外:
DefaultValueDecorator.Read(Compiler.CompilerContext ctx, Compiler.CodeLabel label)
有谁知道这种限制的原因?
为什么不对值类型使用默认值(T)?