【发布时间】:2016-12-22 22:01:42
【问题描述】:
如果我有一个标记的枚举,让我们说参数
[Flags]
public enum Shipping { Null=0x00, FedX=0x01, UPS=0x02, AirBrn=0x04, USPS=0x08, Any=0xFF}
我想将此值存储在 Xml 配置文件中,例如
[XmlAttribute(AttributeName="shipper")]
public Shipping ShippingOption { get; set; }
我知道我必须用空格分隔组合值,例如,如果我希望配置文件将 ShippingOption 表示为 FedX 或 UPS,那么 Xml 将如下所示:
<ElementName shipper="FedX UPS" />
或者如果我希望它代表 FedX、UPS 或 USPS,那么
<ElementName shipper="FedX UPS USPS" />
但是,如果我希望它不是 UPS,我应该在属性中添加什么?
(假设枚举没有预定义的值(如Shipping.Any)
这将相当于 c# 值
var ship = Shipping.Any & ^Shipping.UPS;
我知道我可以省略我不想要的,像这样:
<ElementName shipper="FedX USPS AirBrn " />
但是,如果枚举中有很多成员会变得乏味,(并且在完整列表扩展的任何时候都需要维护)。是否有一种简单的方法来表示标记的枚举的否定?
【问题讨论】:
-
仅供参考,我是FedEx
-
哦,谢谢,这很有帮助。
-
我会使用标志的复合
int值并将其写为属性值。 -
你的意思是像
<ElementName shipper="0xc7" />?那行得通吗?我想我会试试的。虽然它的可读性较差。