如果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;
这会产生任何副作用,如大规模的负速度影响吗? 有没有更好的方法呢?
答案 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);
希望这有帮助