2016-03-07 107 views
1

我做了一個程序,我想根據參數類型轉換所有值,這是通過運行時方法得到的,我想要的是將所有值用戶在文本框中輸入參數的定義類型。 我想要的是將字符串類型轉換爲int,float,decimal等類型在運行時C#

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

我做了一個動態的Web服務調用,其中任何Web服務都被我的項目佔用,但是我被卡住了不同類型的參數,我如何處理不同方法的所有參數? –

+1

'Convert.ChangeType'將適用於有限範圍的內置類型 –

回答

1

你的意思是肯定返回字符串值解析爲一個特定的類型。然後,我提出泛型。具體方法如下:

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它有助於

+0

在我的情況下,這不起作用 int t = 0; int ints = oo.ConvertType (「33」); –

+0

@ user6002727我不明白 – Coding4Fun

+0

我不知道哪種類型來自另一端,所以我怎麼能稱爲「convertType 」,其中g是像int,浮點等任何變量 –

相關問題