3

我有以下测试代码,这给了我一些问题。我希望能够将布尔值作为字符串传递,例如“true”或“false”并返回一个布尔值。该函数应该能够处理其他类型,所以我不能只使用 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 或者它不能以这种方式工作?

4

1 回答 1

5

你可能会在这里受到很多伤害。首先,不仅仅是任何 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 类派生的自己的转换器。

于 2013-03-30T17:17:52.810 回答