Ret*_*der 3 type-conversion c#-4.0
我有以下测试代码,这给了我一些问题。我希望能够将布尔值作为字符串传递,例如“true”或“false”并返回一个布尔值。该函数应该能够处理其他类型,所以我不能只使用 Convert.ToBoolean() 等。
protected static T GetDefaultValue<T>(object propertyName)
{
var tc = new TypeConverter();
return (T)tc.ConvertTo(propertyName, typeof(T));
}
Run Code Online (Sandbox Code Playgroud)
当我用这行代码调用上面的函数时,它抛出一个异常:
bool b = GetDefaultValue<bool>("false");
Run Code Online (Sandbox Code Playgroud)
它说“'TypeConverter' 无法将'System.String' 转换为'System.Boolean'。”
任何人都可以指出如何以我想要的方式使用 TypeConverter 或者它不能以这种方式工作吗?
你可能会在这里受到很多伤害。首先,不是任何 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
Run Code Online (Sandbox Code Playgroud)
但请注意,.NET 仅内置了一组有限的转换器。只是您通常在“属性”窗口中找到的类型。自定义类型需要从 TypeConverter 类派生的自己的转换器。
| 归档时间: |
|
| 查看次数: |
2201 次 |
| 最近记录: |