2014-03-05 99 views
0

我想使用GetType()方法獲取變量的類型,然後將其他變量轉換爲此類型。例如,我有一個Int32 i,一個Double d,我想得到d的類型(在一般情況下),然後將我轉換爲d類型,然後將我的值賦給d。使用類型對象鑄造

Int32 i = 123; 
Double d = 0.0; 
Type t = d.GetType(); 
d = Conversion.CastExamp1 <t> (i); 
d = Conversion.ConvertExamp1 <t> (i); 

PS:@Zyphrax:我已經使用您的文章在這裏 Casting a variable using a Type variable但在編譯的時候,它說:「類型或命名空間名稱‘T’找不到...」。那麼你能否詳細描述一下如何使用你的代碼?

+0

鑄造是很難做到在運行時正確。 –

+3

這裏的用例是什麼? – NWard

+0

我認爲你的水平太高了。有了泛型(''),你可以簡單地執行'Conversion.CastExamp1 (i);' –

回答

1

您不能使用Type作爲通用參數,它必須是可以構造的對象,其中Type不能。關閉你會得到的是通過使用對象作爲參數

using System; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Int32 i = 123; 
      Double d = 0.0; 
      Type t = d.GetType(); 

      // Print the type of d 
      Console.WriteLine(t.Name); // "Double" 

      var newI = DoStuff(t, i); 

      // Print the new type of i 
      Console.WriteLine(newI.GetType().Name); // "Double" 
      Console.Read(); 
     } 

     public static object DoStuff(object type, object inData) 
     { 
      Type newType = (Type)type; 

      // Fix nullables... 
      Type newNullableType = Nullable.GetUnderlyingType(newType) ?? newType; 

      // ...and change the type 
      return Convert.ChangeType(inData, newNullableType); 
     } 
    } 
} 
+0

我的想法是,我想將我的程序分成2層:1層用於UI的用戶輸入帶有某種類型(即:Int32),1層用於數據庫交互。在數據庫交互層,我想重複使用它的多個數據庫,對於一些數據庫我不知道它和.NET之間的類型映射。所以我需要一些方法來獲得.NET類型的數據庫來從UI層傳遞數據。 – anhdung88

+0

請按照我的帖子中的鏈接,可能會幫助你更多地瞭解我的想法 – anhdung88