将字符串转换为类型实例
本文关键字:类型 实例 转换 字符串 | 更新日期: 2023-09-27 18:25:46
有没有这些代码的替代方案,我想要一个更通用的代码我尝试转换类,但没有成功
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;
}
var conv = TypeDescriptor.GetConverter(type);
return conv.ConvertFromInvariantString(value);
如果您不希望使用"不变量",则存在其他转换操作。这取决于你的需要。如果您希望应用区域设置等,请参阅ConvertFromString
。
您提到您尝试过Convert
类,但您也尝试过Convert.ChangeType(value, type)
吗?你遇到的问题在哪里?
创建一个字典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);
}
}
Convert.ChangeType()
方法不转换为空类型、Guid
、Enums
等。ChangeType的此实现将转换所有类型。