C# XAttribute默认值(如果XElement上不存在)
如果XElement上不存在XAttribute,是否有更简单/更好的方法返回默认值 我试着用一种更短的方式写这篇文章(因为它是两行): 我的方法:通过扩展方法:C# XAttribute默认值(如果XElement上不存在),c#,.net,linq,xelement,xattribute,C#,.net,Linq,Xelement,Xattribute,如果XElement上不存在XAttribute,是否有更简单/更好的方法返回默认值 我试着用一种更短的方式写这篇文章(因为它是两行): 我的方法:通过扩展方法: public static XAttribute Attribute(this XElement obj, string name, string defaultValue) { if (obj.Attribute(name) == null) return new XAttribute(name, defau
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;
这会不会有任何副作用,比如巨大的负面速度影响?
有更好的方法吗?有一种更简单的方法:
var v = (string) root.Attribute("testAttribute") ?? "";
如果输入XAttribute
为空,则返回null
。空合并运算符然后有效地提供空字符串的默认值
当然,您仍然可以编写扩展方法,但我会根据上面的内容来编写。我还将
name
参数更改为XName
类型,而不是string
,以获得更大的灵活性。我的项目中需要类似的东西。我创建了一个自定义属性
[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);
希望这有帮助。
System.Xml.Linq
名称空间广泛使用了不明显的隐式转换,因为intellisense不会显示它们。值得注意的是,使用C#6,您还可以执行var v=root.Attribute(“testAttribute”)?.Value??"";代码>@Khale_Kitha:你可以,但我想我还是会做演员。除此之外,当强制转换到其他可为null的类型时,这种方法也可以工作。
var attribute = propertyInfo.GetCustomAttribute(typeof(DefaultValue),false);
var value = attribute.GetValue(element);