C# 向布尔致敬

C# 向布尔致敬,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,这是我的代码,除了一种情况外,它工作得很好:当我有一个xAttribute的bool,所以xAttribute.Value==1。在这种情况下,Convert不适用于数字类型 通常我只会使用output=(bool)xAttribute,这很有效;但是在这个方法中,我有一个泛型类型,所以我想按照output=(T)xAttribute使用这个泛型类型。我该怎么做 public static bool TryGetValueFromAttribute<T>( t

这是我的代码,除了一种情况外,它工作得很好:当我有一个
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;
    }
公共静态bool TryGetValueFromAttribute(
这个元素,,
字符串attName,
输出,
T默认值)
{
var xAttribute=element.Attribute(attName);
if(xAttribute==null)
{
输出=默认值;
返回false;
}
输出=(T)Convert.ChangeType(xAttribute.Value,typeof(T));
返回true;
}

我刚刚使用了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;
    }
public static bool TryGetValueFromAttribute(此XElement元素,字符串attName,out T输出,T defaultValue)
{
var xAttribute=element.Attribute(attName);
if(xAttribute==null)
{
输出=默认值;
返回false;
}
if(typeof(T)=typeof(bool))
{
对象值=XmlConvert.ToBoolean(xAttribute.value);
输出=(T)值;
返回true;
}
输出=(T)Convert.ChangeType(xAttribute.Value,typeof(T));
返回true;
}

我认为您应该在函数定义的末尾添加
where T:new(),class
。我想我会在有空的时候看看这个,并惊讶地发现将字符串“1”更改为bool似乎不是一个好方法。我本以为bool的TypeConverter可以做到这一点,但它只会转换'true'和'false'。如果你问我的话,这是一个很大的疏忽。说将
输出设置为
(t)xAttribute