2

我是 linq to xml 的新手,并尝试执行以下操作。我正在从我收到的一些对象中创建一个新的 xml。

我有一个名为“Scale”的 XElement 有一个 Bool 值“DynamicScale”,如果是False,我需要创建两个XElements作为 的后代Scale,如果是True,我不需要这些元素。

  <Scale DynamicScale="False">
    <LowScale>0</LowScale>
    <HighScale>10000</HighScale>
  </Scale>

有没有办法If在这个创建过程中添加一个语句?或任何其他建议来处理这种需求?如果我想能够做到这一点(我知道这是不可能的)。欢迎任何简单的方法。

new XElement("Scale",
    new XAttribute("DynamicScale", c.DynamicScale),
    if (c.DynamicScale == false)
    {
        new XElement("LowScale", c.LowScale),
        new XElement("HighScale", c.HighScale),
    })
4

2 回答 2

5

使用三元运算符

new XElement(
    "Scale",
    new XAttribute("DynamicScale", c.DynamicScale), 
    c.DynamicScale ? 
        null: 
        new[]
        { 
            new XElement("HighScale", c.HighScale),
            new XElement("LowScale", c.LowScale)
        }
);
于 2013-01-28T16:00:20.930 回答
3
new XElement("Scale",
     new XAttribute("DynamicScale",  c.DynamicScale),
     c.DynamicScale ? null : new XElement("LowScale", c.LowScale),
     c.DynamicScale ? null : new XElement("HighScale", c.HighScale));

对于非动态比例,这将产生

  <Scale DynamicScale="False">
    <LowScale>0</LowScale>
    <HighScale>10000</HighScale>
  </Scale>

对于动态比例

  <Scale DynamicScale="True"/>

或更短的版本:

new XElement("Scale",
     new XAttribute("DynamicScale",  c.DynamicScale),
     c.DynamicScale ? null : new XElement[] {
                  new XElement("LowScale", c.LowScale),
                  new XElement("HighScale", c.HighScale) }
     );
于 2013-01-28T16:11:17.513 回答