Общий приведение x Атрибут bool - PullRequest
1 голос
/ 14 декабря 2011

Вот мой код, который отлично работает, за исключением одного случая: когда у меня 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 Ответ

2 голосов
/ 15 декабря 2011

Я только что использовал 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;
    }
...