Frage

Ich versuche, eine generische Methode für Typkonvertierungen zu machen, die ein Objekt und die Art des Objekts wird gegossen werden.

Mit dem Convert.ChangeType() Verwendung Ich kann tun, was ich will, aber es dauert zu viel Zeit auf der Laufzeit. Was ist die beste Methode, eine generische Klasse zu machen, wie ich will.

Mein alter Code sieht so aus;

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

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

Edit: Um zu klären ...

Für Ex; Ich habe meine Abfrage ausgeführt und es kehrte eine DataRow. Und es gibt eine Spalte, die als Dezimalzahl eingegeben, die ich lange werfen wollen. Wenn ich diese Methode aufrufen, dauert es so viel Zeit dezimal zu lange zu werfen.

Und T Typ dieser Methode kann nur Werttyp sein. Ich meine "T: struct"

War es hilfreich?

Lösung

Ich bezweifle, noch Ihre Leistungsansprüche. Hier ist Beweis. Kompilieren und starten Sie das Programm unten (im Release-Modus):

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

Das dauert 20 Sekunden auf meinem Laptop - 100.000.000 Iterationen auszuführen. Es ist schwer zu glauben, dass es 8 Sekunden auf dem Computer dauert 40 Wiederholungen auszuführen.

Mit anderen Worten, ich nehme stark an, dass das Problem ist nicht, wo Sie denken, es ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top