如果XElement上不存在XAttribute默认值

时间:2012-12-06 16:04:35

标签: c# .net linq xelement xattribute

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

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

var a = root.Attribute("testAttribute");
var v = (a == null ? "" : a.Value);

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

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;

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

2 个答案:

答案 0 :(得分:24)

有一种更简单的方法:

var v = (string) root.Attribute("testAttribute") ?? "";

如果输入null为空,则explicit conversion from XAttribute to string会返回XAttribute。然后,null-coalescing运算符有效地提供空字符串的默认值。

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

答案 1 :(得分:0)

我的项目中需要类似的东西。我创建了一个自定义属性

[AttributeUsage(AttributeTargets.Property)]
public class DefaultValue : Attribute
{
 public string ElementName {get; set;}
 public string AttributeName {get; set;}
 public object DefaultValue {get; set;}

public object GetValue(XElement element)
{
  var v = root.Attribute(AttributeName);
 if(v!= null)
  return v.value;
 else
  return DefaultValue
}
}

我在具有相似用途的所有属性

上使用了此属性
[DefaultValue(ElementName="elementName",AttributeName="attri",DefaultValue="Name")]
public string Prop{get; set;}

我通过调用此属性的方法来获取值

var attribute = propertyInfo.GetCustomAttribute(typeof(DefaultValue),false);
var value = attribute.GetValue(element);

希望这有帮助

相关问题