如果XElement上不存在XAttribute默认值

Mik*_*ike 16 .net c# linq xelement xattribute

如果XElement上的XAttribute不存在,是否有更简单/更好的方法来返回默认值?:

我试图以更短的方式写这个(因为它是一个双线):

var a = root.Attribute("testAttribute");
var v = (a == null ? "" : a.Value);
Run Code Online (Sandbox Code Playgroud)

我的方法:通过扩展方法:

public static XAttribute Attribute(this XElement obj, string name, string defaultValue)
{
    if (obj.Attribute(name) == null)
        return new XAttribute(name, defaultValue);
    return obj.Attribute(name);
}

var v = root.Attribute("testAttribute", "").Value;
Run Code Online (Sandbox Code Playgroud)

这会产生任何副作用,如大规模的负面速度影响吗?有没有更好的方法呢?

Jon*_*eet 24

有一个更容易的方法来做到这一点:

var v = (string) root.Attribute("testAttribute") ?? "";
Run Code Online (Sandbox Code Playgroud)

明确的转换,从XAttributestring回报null,如果输入XAttribute为空.然后,空合并运算符有效地提供空字符串的默认值.

当然,您仍然可以编写扩展方法,但我会按照上述方法编写.为了更大的灵活性,我还将name参数更改为类型XName而不是string.