TypeConverter不会转换为布尔值

时间:2013-03-30 17:00:31

标签: c#-4.0 type-conversion

我有以下测试代码,它给了我一些问题。我希望能够将一个布尔值作为字符串传递,EG“true”或“false”并返回一个bool。该函数应该能够处理其他类型,所以我不能只使用Convert.ToBoolean()等

    protected static T GetDefaultValue<T>(object propertyName)
    {
        var tc = new TypeConverter();

        return (T)tc.ConvertTo(propertyName, typeof(T));
    }

当我用这行代码调用上面的函数时,它会引发异常:

bool b = GetDefaultValue<bool>("false");

它说“'TypeConverter'无法将'System.String'转换为'System.Boolean'。”

有人能指出如何以我想要的方式使用TypeConverter,或者它是不是以这种方式工作?

1 个答案:

答案 0 :(得分:4)

你可能会在这里受到很多伤害。首先,不只是任何TypeConverter会做,你必须找到知道如何将字符串转换为布尔值的特定的。您可以使用TypeDescriptor.GetConverter()获得一个。对于bool而言,这不是问题,您将获得System.ComponentModel.BooleanConventer。并且您必须使用其ConvertFrom()方法,而不是ConvertTo。所以这很好用:

    protected static T GetDefaultValue<T>(object propertyName) {
        var tc = TypeDescriptor.GetConverter(typeof(T));
        return (T)tc.ConvertFrom(propertyName);
    }
    ...
        bool b = GetDefaultValue<bool>("false");    // fine

但请注意,.NET内置的转换器只有一组有限。只是您通常在“属性”窗口中找到的类型。自定义类型需要从TypeConverter类派生自己的转换器。