خطأ أثناء استخدام Protobuf-Net مع الأعلام Enum
-
18-09-2019 - |
سؤال
أثناء استخدام 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 بدلا من المعين.
لا تنتمي إلى StackOverflow