문제

나는 객체와 캐스트 할 객체의 유형을 얻는 유형 변환을위한 일반적인 방법을 만들려고 노력하고 있습니다.

사용하여 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 초가 걸린다 고 믿기가 어렵습니다.

다시 말해, 나는 문제가 당신이 생각하는 곳이 아니라고 강력하게 의심합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top