将字符串转换为类型实例

时间:2012-02-24 16:08:33

标签: c# type-conversion

你有这些代码的替代品,我想要一个更通用的代码 我尝试过转换类但没有成功

        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; 
        }

4 个答案:

答案 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()方法无法转换为无效类型,GuidEnums等。此implementation of ChangeType会将其全部转换。