Generic将xAttribute转换为bool

时间:2011-12-14 10:22:16

标签: c# xml linq-to-xml

这是我的代码,除了一种情况外,它的效果非常好:当我有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;
    }

1 个答案:

答案 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;
    }