سؤال

أثناء استخدام Protobuf-Net وتسليط خاصية Enum، حيث يتم تعيين ENUM على [FlagSattribute]، استلمت رسالة الخطأ التالية عند تسلسل قيمة Enum تتألف من إشارات متعددة.

الخطأ هو: القيمة (myenum.myvalue) لا يوجد لديه نص تمثيل للسلك للممتلكات myproperty

أين مينيوم يكون:

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

و

MyProperty = MyEnum.MyValue2 | MyEnum.MyValue4;

يبدو أن يكون خطأ في protobuf-net؟

هل كانت مفيدة؟

المحلول

تحديث: تم إصلاح هذا الآن في R274.; ؛ سوف تستخدم:

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

في نهاية المطاف، لا يوفر تنسيق الأسلاك المخزن المؤقت بروتوكول أي نطاق ل [أعلام] عودة - فهو يفرض قيم المعهد مقابل المجموعة السرية. أستطيع أن أسمح بهذا بسهولة ENUGH، ولكن:

  • من المحتمل أن تعطيل تعيينات المعهد في هذه الحالة، أو القيام بالكثير من العمل القبيح قليلا
  • لن يكون متوافقا تماما

قد يكون وسيلة أسهل للقيام بذلك في شيم في التعليمات البرمجية الخاصة بك:

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

البديل الآخر هو إضافة علم يعمل مثل ما سبق نيابة عنك؛ تعاملها باعتبارها int بدلا من المعين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top