你应该怎么用XML中的空值来编写属性

时间:2013-06-18 11:45:27

标签: c# xml linq-to-xml

我使用linq to xml为应用程序写出一个小配置文件,并且发现XAttributes不接受null作为它们的值有点惊讶 - 它们会抛出异常。

Null是我配置中许多属性的完全有效值,我不想在任何地方检查属性:

            var attribute = _element.Attribute(attribute);
            var value = attribute == null ? null : attribute.Value;

我不想编写这样的代码的另一个原因是它会更容易错误输入事物的名称 - 例如,如果属性拼写错误,它将像一个存在的属性,但具有空值而非而不是抛出异常。

我现在的解决方案如下,但它看起来有点难看+就像你不应该做的那样。

我已经敲了一个小类,以便更容易编写+读取xml并使用仅包含空字符的字符串来表示空字符串。

为了简洁,我省略了除索引器之外的所有内容:

public class XContainerWrapper
{
    private readonly XElement _element;

    public XContainerWrapper(XElement xElement)
    {
        _element = xElement;
    }

    public string this[string attribute]
    {
        get
        {
            var value = _element.Attribute(attribute).Value;
            return value == "\0" ? null : value;
        }
        set
        {
            var valueToWrite = value ?? "\0";
            _element.Add(new XAttribute(attribute, valueToWrite));
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您可以编写自己的扩展方法而不是XAttribute Value getter:

public static class XmlExtensions {
  public static string SafeValue(this XAttribute attribute) {
    var value = attribute == null ? null : attribute.Value;
    return value;
  }
}

然后你可以使用

XAttribute a = null;
var value = a.SafeValue();