#if区域不工作
本文关键字:工作 区域 #if | 更新日期: 2023-09-27 17:51:09
我想使用#if
语句,当val2
为真时跳过序列化val
,当val2
为假时序列化val
。但我的代码似乎不工作:
#if val2
[XmlIgnore]
#else
[XmlElement(ElementName = "val")]
#endif
public bool val
{
{ get; set; } = false;
}
[XmlElement(ElementName = "val2")]
public bool val2
{
{ get; set; } = true;
}
我要怎么做才能让它工作?由于
我认为你需要定义你正在用#define
测试的符号。这些是预处理器指令,你不能使用普通的属性名等,因为它们在编译过程中起作用,这发生在预处理之后。
这是来自标准:
预处理表达式的求值总是产生一个布尔值。预处理表达式的求值规则与常量表达式的求值规则相同(§7.19),除了唯一可以引用的用户定义实体是条件编译符号。
正如这个问题所指出的,你需要这样做:
public class Item
{
public bool val { get; set; }
public bool ShouldSerializeval()
{
return !val2;
}
[XmlElement(ElementName = "val2")]
public bool val2 { get; set; }
}
void Main()
{
Item item = new Item(){val=true, val2=true};
XmlSerializer xs = new XmlSerializer(typeof(Item));
StringWriter sw = new StringWriter();
xs.Serialize(sw, item);
sw.ToString();
}
只要在您的代码中添加以下选项之一,当val2
为true时,val
将不会被序列化:
public bool ShouldSerializeval()
{
return val2 == false;
}
或
public bool ShouldSerializeval()
{
return !val2;
}