Pregunta

Estoy tratando de hacer un método genérico para las conversiones de tipo que obtiene un objeto y el tipo de objeto a lanzar.

Al usar Convert.ChangeType () puedo hacer lo que quiero, pero me lleva demasiado tiempo ejecutarlo. ¿Cuál es el mejor método para hacer una clase genérica como quiero?

Mi código anterior se ve así;

public static ConvertTo<T>(object data) where T : struct // yes the worst variable name!
{
  // do some controls...

  return Convert.ChangeType(data, typeof(T));
}

Editar: Para aclarar ...

Para Ex; Ejecuté mi consulta y me devolvió un DataRow. Y hay una columna que escribió como decimal que quiero emitir demasiado. Si llamo a este método, lleva mucho tiempo convertir el decimal en largo.

Y el tipo T de este método podría ser solo un tipo de valor. Me refiero a "T: estructura"

¿Fue útil?

Solución

Todavía dudo de tus afirmaciones de rendimiento. Aquí hay evidencia. Compile y ejecute el siguiente programa (en modo de lanzamiento):

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

Eso lleva 20 segundos en mi computadora portátil, para ejecutar 100,000,000 iteraciones. Es difícil creer que su computadora tarde 8 segundos en ejecutar 40 iteraciones.

En otras palabras, sospecho firmemente que el problema no está donde crees que está.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top