【发布时间】:2021-11-27 08:00:45
【问题描述】:
我有一个使用位掩码的典型模式int 的 C++ 程序。这个位掩码在这样的枚举中定义:
enum EModeEntryPoint
{
// Mode
entryPointNone =0x00,
entryPointNormal =0x01,
entryPointExistingAddress =0x02,
entryPointNewAddress =0x04,
entryPointNewAndExisting =0x06,
entryPointOnlyNewTickets =0x08,
};
当我在这样的 C# WCF 服务中使用枚举时
[DataContractAttribute]
public enum ModeEntryPoint
{
// Mode
[EnumMember] None =0x00,
[EnumMember] Normal =0x01,
[EnumMember] ExistingAddress =0x02,
[EnumMember] NewAddress =0x04,
[EnumMember] NewAndExisting =0x06,
[EnumMember] OnlyNewTickets =0x08,
};
我可以看到我在这里定义的值没有被使用。我可以看到这样的枚举总是被“重新编号”。
是否可以在任何地方的合约中定义这样的比特使用?
为每个位创建一个布尔字段不是我喜欢的。它还会使数据块膨胀。
【问题讨论】:
-
你想使用
DataContract还是DataContractAttribute? -
我认为您应该指定枚举值,例如
[EnumMember(Value="ExistingAddress")] -
@MatthewWatson 谢谢。我会看看这个!
-
另外:如果这些是位:考虑用
[Flags]标记枚举;考虑None = 0、Normal = 1 << 0、ExistingAddress = 1 << 1、NewAddress = 1 << 2、NewAndExisting = NewAddress | ExistingAddress也可能有用 -
也许你可以看看the docs 并找到一些解决方案。
标签: c# c++ wcf datacontract wcf-serialization