2013-03-30 35 views
0

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

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或不这样工作吗?

回答

2

您可能会在这里遇到很多hurtin'。首先,不只是任何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类派生自己的转换器。

+0

感谢您的回复。当例外表示无法进行转换时,我以为我会生气。 – Retrocoder