编译protobuf-net生成的代码时出错

时间:2012-04-16 22:35:04

标签: c# protocol-buffers protobuf-net

在protobuf-net生成的代码中出现了有趣的错误。 .proto定义文件包含对象的名为“value”的字段。使用-p:detectMissing选项为该值生成的protogen.exe:

    private int? _value;
    [global::ProtoBuf.ProtoMember(50, IsRequired = false, Name=@"value", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
    [global::System.Xml.Serialization.XmlElement(@"value", Order = 50)]

    public int value
    {
        get { return _value ?? default(int); }
        set { _value = value; }
    }

    [global::System.Xml.Serialization.XmlIgnore]
    [global::System.ComponentModel.Browsable(false)]
    public bool valueSpecified
    {
      get { return _value != null; }
        set { if (value == (_value == null)) _value = value ? value : (int?)null; }
    }
    private bool ShouldSerializevalue() { return valueSpecified; }
    private void Resetvalue() { valueSpecified = false; }

编译器会产生错误,认为是关键字,但不是类属性:

  

由于存在,因此无法确定条件表达式的类型   'bool'和'int?'之间没有隐式转换

手动修改生成的代码:

public int valueWorkaround
{
    get { return _value ?? default(int); }
}

public bool valueSpecified
{
  get { return _value != null; }
    set { if (value == (_value == null)) _value = value ? valueWorkaround : (int?)null; }
}

然而,修复代码生成可能也是有意义的吗?

1 个答案:

答案 0 :(得分:0)

是的,修复代码生成是有意义的。我想,你应该把它报告给项目贡献者。