将字符串转换为类型实例

本文关键字:类型 实例 转换 字符串 | 更新日期: 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()方法不转换为空类型、GuidEnums等。ChangeType的此实现将转换所有类型。