Преобразование типов в C#
-
11-07-2019 - |
Вопрос
Я пытаюсь создать универсальный метод для преобразования типов, который получает объект и тип объекта для приведения.
Используя 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 .И есть столбец, который набран как десятичный, который я хочу преобразовать в long.Если я вызываю этот метод, преобразование десятичного числа в длинное занимает очень много времени.
И типом этого метода может быть только тип значения.Я имею в виду "Т :структура"
Решение
Я все еще сомневаюсь в ваших заявлениях о производительности.Вот доказательства.Скомпилируйте и запустите приведенную ниже программу (в режиме выпуска):
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 секунд - выполнить 100 000 000 итераций.Трудно поверить, что на выполнение 40 итераций на вашем компьютере уходит 8 секунд.
Другими словами, я сильно подозреваю, что проблема не там, где вы думаете.