这是我的代码,除了一种情况外,它的效果非常好:当我有xAttribute
bool
时,xAttribute.Value == 1
。在这种情况下,Convert
不适用于数字类型。
通常我只会使用output = (bool) xAttribute
,这有效;但是在这个方法中我有一个泛型类型,所以我想沿着output = (T) xAttribute
的行使用那个泛型类型。我怎么能这样做?
public static bool TryGetValueFromAttribute<T>(
this XElement element,
String attName,
out T output,
T defaultValue)
{
var xAttribute = element.Attribute(attName);
if (xAttribute == null)
{
output = defaultValue;
return false;
}
output = (T)Convert.ChangeType(xAttribute.Value, typeof(T));
return true;
}
答案 0 :(得分:2)
我刚刚使用了XmLConvert。是一个简单的解决方法。它甚至适用于0和1
此致
public static bool TryGetValueFromAttribute<T>(this XElement element, String attName, out T output, T defaultValue)
{
var xAttribute = element.Attribute(attName);
if (xAttribute == null)
{
output = defaultValue;
return false;
}
if(typeof(T) == typeof(bool))
{
object value = XmlConvert.ToBoolean(xAttribute.Value);
output = (T) value;
return true;
}
output = (T)Convert.ChangeType(xAttribute.Value, typeof(T));
return true;
}