C# 4.0 TypeConverter赢得';t转换为布尔值

C# 4.0 TypeConverter赢得';t转换为布尔值,c#-4.0,type-conversion,C# 4.0,Type Conversion,我有下面的测试代码,这给了我一些问题。我希望能够以字符串形式传入布尔值,例如“true”或“false”,然后返回布尔值。该函数应该能够处理其他类型,所以我不能只使用Convert.ToBoolean()等 受保护的静态T GetDefaultValue(对象属性名称) { var tc=新类型转换器(); 返回(T)tc.ConvertTo(propertyName,typeof(T)); } 当我用这行代码调用上述函数时,它会抛出一个异常: bool b = GetDefaultValue

我有下面的测试代码,这给了我一些问题。我希望能够以字符串形式传入布尔值,例如“true”或“false”,然后返回布尔值。该函数应该能够处理其他类型,所以我不能只使用Convert.ToBoolean()等

受保护的静态T GetDefaultValue(对象属性名称)
{
var tc=新类型转换器();
返回(T)tc.ConvertTo(propertyName,typeof(T));
}
当我用这行代码调用上述函数时,它会抛出一个异常:

bool b = GetDefaultValue<bool>("false");
bool b=GetDefaultValue(“false”);
它表示“'TypeConverter'无法将'System.String'转换为'System.Boolean'。”


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

在这里,你可能会受到很多伤害。首先,不仅仅是任何类型转换器都可以,您必须找到知道如何将字符串转换为布尔值的特定类型转换器。您可以使用TypeDescriptor.GetConverter()获得一个。这不是布尔的问题,您将得到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
受保护的静态T GetDefaultValue(对象属性名称){
var tc=TypeDescriptor.GetConverter(typeof(T));
返回(T)tc.ConvertFrom(propertyName);
}
...
bool b=GetDefaultValue(“false”);//好的

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

谢谢您的回复。当异常说它不能进行转换时,我想我快发疯了。
    protected static T GetDefaultValue<T>(object propertyName) {
        var tc = TypeDescriptor.GetConverter(typeof(T));
        return (T)tc.ConvertFrom(propertyName);
    }
    ...
        bool b = GetDefaultValue<bool>("false");    // fine