1

我使用 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));
        }
    }
}
4

1 回答 1

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();
于 2013-06-18T12:00:13.093 回答