1

我有一个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,  
};

我可以看到我在这里定义的值没有被使用。我可以看到这样的枚举总是被“重新编号”。

是否可以在任何地方的合同中定义这种位使用?

为每个位创建一个布尔字段不是我喜欢的。它还会使数据块膨胀。

4

1 回答 1

1

[Flags] 关键字就是解决方案。

[DataContractAttribute][Flags]
public enum ModeEntryPoint
{
    // Mode
    [EnumMember] None = 0x00,
    [EnumMember] Normal = 0x01,
    [EnumMember] ExistingAddress = 0x02,
    [EnumMember] NewAddress = 0x04,
    [EnumMember] 
    NewAndExisting = ExistingAddress| NewAddress,  
    [EnumMember] OnlyNewTickets = 0x08,  
};

这允许 WCF 客户端解码此类型的特定字段。

于 2021-10-08T09:07:15.800 回答