你有这些代码的替代品,我想要一个更通用的代码 我尝试过转换类但没有成功
public object convert(Type type, string value)
{
object r = null;
if (type == typeof(bool))
{
r = bool.Parse(value);
}
else if (type == typeof(int))
{
r = int.Parse(value);
}
else if (type == typeof(string))
{
r = value;
}
return r;
}
答案 0 :(得分:7)
var conv = TypeDescriptor.GetConverter(type);
return conv.ConvertFromInvariantString(value);
如果您不想要“不变”,则存在其他转换操作。这取决于您的需求。如果您想要应用区域设置等,请参阅ConvertFromString
答案 1 :(得分:6)
你提到你已经尝试了Convert
课程,但是你还试过Convert.ChangeType(value, type)
吗?您遇到问题的地方是什么?
答案 2 :(得分:0)
如何创建字典Dictionary<Type, Func<string, object>>
?
也许是这样的:
public static class MyConverter
{
private static Dictionary<Type, Func<string, object>> _Converters;
static MyConverter()
{
_Converters = new Dictionary<Type, Func<string, object>>();
// Add converter from available method
_Converters.Add(typeof(double), MySpecialConverter);
// Add converter as lambda
_Converters.Add(typeof(bool), (text) => bool.Parse(text));
// Add converter from complex lambda
_Converters.Add(typeof(int), (text) =>
{
if (String.IsNullOrEmpty(text))
{
throw new ArgumentNullException("text");
}
return int.Parse(text);
});
}
private static object MySpecialConverter(string text)
{
return double.Parse(text);
}
public static object Convert(Type type, string value)
{
Func<string, object> converter;
if (!_Converters.TryGetValue(type, out converter))
{
throw new ArgumentException("No converter for type " + type.Name + " available.");
}
return converter(value);
}
}
答案 3 :(得分:0)
Convert.ChangeType()
方法无法转换为无效类型,Guid
,Enums
等。此implementation of ChangeType会将其全部转换。