2009-09-29 6 views
5

, aşağıdaki hata iletisi aldı.hata bayrakları enum Protobuf-Net kullanırken

hatadır:

[Flags] 
public Enum MyEnum 
{ 
    MyValue = 0, 
    MyValue1 = 1, 
    MyValue2 = 2, 
    MyValue4 = 4, 
    MyValue8 = 8, 
} 

ve

MyProperty = MyEnum.MyValue2 | MyEnum.MyValue4; 

görünüyor: değeri (MyEnum.MyValue) MyEnum olan

nerede özelliği myProperty için bir tel gösterimi olan protobuf-net bir böcek ol?

+0

Şimdi r274 sabit; Güncellenmiş yanıtı gör –

cevap

4

Güncelleme: bu şimdi r274 düzeltilmiştir; istersek:

[ProtoMember(12, DataFormat = DataFormat.TwosComplement)] 
public MyEnum MyValue {get;set;} 

Sonuçta protokol tamponlar tel biçimi [Bayraklar] çeteleler için herhangi kapsamını sağlamaz - bu sağduyulu seti karşı enum değerleri uygular. Kolayca enugh buna izin, ancak:

  • Herhalde o kesinlikle uyumlu olmaz bu durumda enum eşleştirmeleri devre dışı bırakmak veya çirkin yüzden-- eşleştirme çalışması
  • bir sürü yapmak zorundayız

kodunuzdaki bir dolgu yapmak olabilir bunu yapmanın daha kolay bir yolu:

public MyEnum MyValue {get;set;} 
[ProtoMember(12)] 
private int MyValueWire { 
    get {return (int)MyValue;} 
    set {MyValue = (MyEnum)value;} 
} 

diğer alternatif sizin 01 yukarıdaki gibi çalışır bir bayrak eklemek olacaktıradına; onu bir enum yerine bir int olarak ele alır.

+0

Yanıt için zaman ayırdığınız için teşekkür ederiz. Enum'un bir int olarak ele alınması gerektiğini belirtmek için ProtoMember özniteliğine bir bayrak yerleştirdiğim son alternatifi tercih ederim. –

+0

Düzeltme için çok teşekkür ederim! –