代码之家  ›  专栏  ›  技术社区  ›  Ali Ersöz

C语言中的类型转换#

  •  4
  • Ali Ersöz  · 技术社区  · 16 年前

    我试图为类型转换创建一个通用方法,该方法获取一个对象和要强制转换的对象类型。

    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。还有一列输入为decimal,我想转换为long。如果我调用这个方法,将十进制转换为long需要很多时间。

    此方法的T类型只能是值类型。我是说“T:struct”

    1 回复  |  直到 16 年前
        1
  •  3
  •   Jon Skeet    16 年前

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

    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));
        }
    }
    

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