我正在尝试将字符串转换为其对应的类(即“{”为true
)。我得到“TypeConverter无法从System.String转换”。传递的值是“true”。
我是以错误的方式调用方法吗?
public static T ToClass<T>(this IDictionary<string, string> source) where T : class, new()
{
Type type = typeof(T);
T ret = new T();
foreach (var keyValue in source)
{
type.GetProperty(keyValue.Key).SetValue(ret, keyValue.Value.ToString().TestParse<T>(), null);
}
return ret;
}
public static T TestParse<T>(this string value)
{
return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(value);
}
答案 0 :(得分:6)
问题是,传递给T
方法的TestParse
不是bool类型,而是要创建的类的类型。如果将行更改为
public static bool TestParse(this string value)
{
return (bool)TypeDescriptor.GetConverter(typeof(bool)).ConvertFromString(value);
}
它适用于布尔案,但显然不适用于其他案件。您需要通过反射获取要设置的属性类型,并将其传递给TestParse
方法。
public static T ToClass<T>(this IDictionary<string, string> source) where T : class, new()
{
Type type = typeof(T);
T ret = new T();
foreach (var keyValue in source)
{
var propertyInfo = type.GetProperty(keyValue.Key);
propertyInfo.SetValue(ret, keyValue.Value.ToString().TestParse(propertyInfo.PropertyType), null);
}
return ret;
}
public static object TestParse(this string value, Type type)
{
return TypeDescriptor.GetConverter(type).ConvertFromString(value);
}
我还会将TestParse
方法从扩展方法更改为普通方法,因为它感觉有点奇怪
答案 1 :(得分:1)
按照this answer中的说法执行:
return (T)Convert.ChangeType(value, typeof(T));
其中T
是目标类型,值是string
类型
编辑:这仅适用于IConvertible
实施者......