2008-11-25 80 views
4

我試圖做一個類型轉換的泛型方法,它獲取一個對象和要被轉換的對象的類型。C#中的類型轉換#

通過使用Convert.ChangeType()我可以做我想做的事,但在運行時間上花費太多時間。像我想要的那樣製作泛型類的最佳方法是什麼?

我的舊代碼看起來像那樣;

public static ConvertTo<T>(object data) where T : struct // yes the worst variable name! 
{ 
    // do some controls... 

    return Convert.ChangeType(data, typeof(T)); 
} 

編輯: 爲了澄清...

對於防爆;我執行了我的查詢並返回了一個DataRow。並且有一列輸入爲十進制數字,我想投入很長時間。如果我調用這個方法,需要很多時間才能將小數點轉換爲長整數。

此方法的T類型可能只是值類型。我的意思是「T:struct」

+0

您可以更具體一點:「運行時間需要太多時間」。你有沒有簡介它來檢查它是這個代碼? – 2008-11-25 16:01:53

+0

是的,我認爲問題出在該代碼中。通過「在運行時間上花費太多時間」,我的意思是40次調用這個方法總共需要8秒。 – 2008-11-25 16:05:48

回答

3

我仍然懷疑你的表現要求。這裏有證據。編譯並運行下面的程序(在發佈模式下):

using System; 
using System.Diagnostics; 

class Test 
{ 
    const int Iterations = 100000000; 

    static void Main() 
    { 
     Stopwatch sw = Stopwatch.StartNew(); 
     decimal d = 1.0m; 
     long total = 0; 
     for (int i=0; i < Iterations; i++) 
     { 
      long x = ConvertTo<long>(d); 
      total += x; 
     } 
     sw.Stop(); 
     Console.WriteLine("Time: {0}ms", sw.ElapsedMilliseconds); 
     Console.WriteLine("Total: {0}", total); 
    } 

    public static T ConvertTo<T>(object data) where T : struct 
    { 
     return (T) Convert.ChangeType(data, typeof(T)); 
    } 
} 

這需要20秒在我的筆記本電腦上 - 執行100,000,000次迭代。很難相信您的計算機需要8秒才能執行40次迭代。

換句話說,我強烈懷疑問題不在你認爲的地方。