문제
나는 객체와 캐스트 할 객체의 유형을 얻는 유형 변환을위한 일반적인 방법을 만들려고 노력하고 있습니다.
사용하여 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"를 의미합니다
해결책
나는 여전히 당신의 성과 주장을 의심합니다. 여기 증거가 있습니다. 아래 프로그램을 컴파일하고 실행합니다 (릴리스 모드) :
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 초가 걸리면 10 만 회 반복을 실행합니다. 40 개의 반복을 실행하는 데 컴퓨터에서 8 초가 걸린다 고 믿기가 어렵습니다.
다시 말해, 나는 문제가 당신이 생각하는 곳이 아니라고 강력하게 의심합니다.
제휴하지 않습니다 StackOverflow