我正在尝试为类型转换创建一个通用方法,它获取一个对象和要转换的对象类型。
使用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));
}
编辑: 澄清...
对于Ex;我已经执行了我的查询,它返回了一个DataRow。并且有一个列为十进制的列,我想要转换为long。如果我调用此方法,则需要花费大量时间将十进制转换为long。
此方法的T类型可能只是值类型。我的意思是“T:struct”
答案 0 :(得分: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次迭代。
换句话说,我强烈怀疑问题不在你认为的地方。