将String Type转换为int,float,decimal等在运行时C#上键入

时间:2016-03-07 12:52:31

标签: c# reflection

我已经创建了一个程序,我希望根据运行时方法得到的参数类型转换所有值,我想要的是转换用户在文本框中输入的所有值的define参数类型。 我想要的是

private object convertType(Type type, string value)
    {
        Type t = typeof(int);
        //suppose value have stringvalue=33;
        return 33; //of type int
    }

有没有办法获得任何对象类型?

更新了答案

代表@Atmane EL BOUACHRI,

class Program
{
 static void Main()
 {

   var ints =  ConvertType<int>("33");
   var bools = ConvertType<bool>("false");
   var decimals = ConvertType<decimal>("1.33m"); // exception here
   Console.WriteLine(ints);
   Console.WriteLine(bools);
    Console.WriteLine(decimals);

    Console.ReadLine();
 }

 public static T ConvertType<T>(string input)
 {
    T result =  default(T);
    var converter = TypeDescriptor.GetConverter(typeof(T));
    if (converter != null)
    {
        try
        {
            result =  (T)converter.ConvertFromString(input);
        }
        catch 
        {
            // add you exception handling
        }
    }
    return result;
 }
}

我不想要硬代码<int><string><decimal>,我想要的是

private object convertToAnyType(Type type, string value)
{
    //Type t = typeof(int);
    return ConvertType<type>("33");
}

有什么办法吗?

1 个答案:

答案 0 :(得分:1)

你的意思是肯定会返回解析为特定Type的字符串值。然后,我提出了泛型。方法如下:

1) - 没有泛型(我更喜欢2中的泛型) - )

 class Program
    {
        static void Main()
        {

            var ints = (int)ConvertType(typeof(int),"33"); 
            var bools = (bool)ConvertType(typeof(bool), "true");   

            Console.WriteLine(bools);
            Console.WriteLine(ints);

            Console.ReadLine();
        }

        public static object ConvertType(Type type, string input)
        {
            object result = default(object);
            var converter = TypeDescriptor.GetConverter(type);
            if (converter != null)
            {
                try
                {
                    result = converter.ConvertFromString(input);
                }
                catch
                {
                    // add you exception handling
                }
            }
            return  result;
        }
    }

2) - 与通用

class Program
{
    static void Main()
    {

       var ints =  ConvertType<int>("33");
       var bools = ConvertType<bool>("false");
       var decimals = ConvertType<decimal>("1.33m"); // exception here
       Console.WriteLine(ints);
       Console.WriteLine(bools);
        Console.WriteLine(decimals);

        Console.ReadLine();
    }

    public static T ConvertType<T>(string input)
    {
        T result =  default(T);
        var converter = TypeDescriptor.GetConverter(typeof(T));
        if (converter != null)
        {
            try
            {
                result =  (T)converter.ConvertFromString(input);
            }
            catch 
            {
                // add you exception handling
            }
        }
        return result;
    }
}

Hpe it help