Tipo de conversão em C #
-
11-07-2019 - |
Pergunta
Eu estou tentando fazer um método genérico para conversões de tipo que recebe um objeto e o tipo de objeto a ser fundido.
Ao usar Convert.ChangeType()
posso fazer o que eu quero, mas leva muito tempo em tempo de execução. Qual é o melhor método para fazer uma classe genérica como eu quero.
Os meus olhares de código antigos como isso;
public static ConvertTo<T>(object data) where T : struct // yes the worst variable name!
{
// do some controls...
return Convert.ChangeType(data, typeof(T));
}
Edit: Para esclarecer ...
Para Ex; Eu executada minha consulta e retornou um DataRow. E há uma coluna que digitado como decimal que eu quero elenco muito tempo. Se eu chamar esse método, que leva muito tempo para decimal elenco muito tempo.
TipoE T deste método poderia ser apenas tipo de valor. Quero dizer "T: struct"
Solução
Eu ainda duvidar de suas reivindicações de desempenho. Aqui está a evidência. Compilar e executar o programa abaixo (em modo release):
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));
}
}
Isso leva 20 segundos no meu laptop - para executar 100.000.000 iterações. É difícil de acreditar que ele leva 8 segundos no seu computador para executar 40 iterações.
Em outras palavras, eu suspeito fortemente que o problema não é onde você pensa que é.