我有以下测试代码,它给了我一些问题。我希望能够将一个布尔值作为字符串传递,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,或者它是不是以这种方式工作?
答案 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类派生自己的转换器。