Type conversion C语言中的类型转换#
我试图为类型转换创建一个通用方法,该方法获取一个对象和要强制转换的对象类型 通过使用Type conversion C语言中的类型转换#,type-conversion,casting,Type Conversion,Casting,我试图为类型转换创建一个通用方法,该方法获取一个对象和要强制转换的对象类型 通过使用Convert.ChangeType()我可以做我想做的事情,但是它在运行时花费了太多的时间。创建我想要的泛型类的最佳方法是什么 我的旧代码是这样的 public static ConvertTo<T>(object data) where T : struct // yes the worst variable name! { // do some controls... return 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));
}
publicstaticconvertto(对象数据),其中T:struct//yes是最差的变量名!
{
//做一些控制。。。
返回Convert.ChangeType(数据,typeof(T));
}
编辑:
为了澄清
例如:;我已经执行了查询,它返回了一个DataRow。还有一列输入为decimal,我想转换为long。如果我调用这个方法,将十进制转换为long需要很多时间
此方法的T类型只能是值类型。我的意思是“T:struct”我仍然怀疑您的性能声明。这是证据。编译并运行以下程序(在发布模式下):
使用系统;
使用系统诊断;
课堂测试
{
const int迭代次数=100000000;
静态void Main()
{
秒表sw=Stopwatch.StartNew();
十进制d=1.0m;
长总计=0;
对于(int i=0;i
在我的笔记本电脑上执行100000000次迭代需要20秒。很难相信在计算机上执行40次迭代需要8秒
换句话说,我强烈怀疑问题不在您认为的地方。您能否更具体地说明一下“运行时花费的时间太多”。你分析过它以检查它是否是这个代码吗?是的,我分析过问题出在那个代码中。“它在运行时花费了太多的时间”,我的意思是40次调用这个方法总共需要8秒。40次调用需要8秒?我觉得这很难相信,除非你有一些自定义类型转换器涉及到这需要时间。请提供一个简短但完整的示例程序。实际上,我在另一台机器上看到了经过的时间,也许我错过了什么。当我尝试时,我没有花这么多时间。我会查一下那台机器上的密码,马上给你回电话。
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));
}
}