C#中的类型转换#

问题描述:

我试图做一个类型转换的泛型方法,它获取一个对象和要被转换的对象的类型。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

我仍然怀疑你的表现要求。这里有证据。编译并运行下面的程序(在发布模式下):

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次迭代。

换句话说,我强烈怀疑问题不在你认为的地方。