Как решить «Арифметическая операция привела к переполнению».для перечислений с длинными значениями - PullRequest
1 голос
/ 27 сентября 2019

Допустим, у меня есть перечисление

public enum PricingFlags : long

, значение которого равно 100000000000100001111111000010001_2 или 4296080913. В основном это набор флагов, таких как

[Description("Aggregate")]
Aggregate = 1L << 7,

, логических ИЛИ, соединенных вместе.Я использую версию 2.3.1.

Я пытался добавить EnumPassthru в атрибуте

[ProtoContract(ImplicitFields = ImplicitFields.AllPublic, EnumPassthru = true)]

или в спецификации protobuf,

 RuntimeTypeModel.Default[typeof(PricingFlags)].EnumPassthru = true;

после поиска в Google я нашел https://github.com/protobuf-net/protobuf-net/issues/219, который сказал мне, что есть шанс, что он должен работать, но это не так.Я что-то не так делаю?

1 Ответ

1 голос
/ 27 сентября 2019

Мой совет на сегодня: объявите свойство shadow (возможно, private), которое представляет данные как long, выполняя приведение в вашем коде.

Код перечисления V2 довольно уродлив для этого.Я разбиваю это в V3 (в основном все перечисления становятся родным passthrus), поэтому я добавлю их как тестовые сценарии для V3.

...