Ich habe ein großes Projekt, das ursprünglich in C# 1.1 geschrieben wurde und nun auf C# 2.0 abzielt. Es gibt mehrere Klassen, die Methoden haben, die einen ArrayList-Parameter nehmen, den ich starten möchte, um diese als Parameter zu übernehmen, aber das kann nicht auf einmal gemacht werden, also muss ich beide Parameter akzeptieren.Parameter von ArrayList in die Liste migrieren <T>
Mein Hauptgrund für die Migration ist, dass List<>
Objekte als Parameter akzeptiert werden, aber ich möchte auch Typsicherheit nutzen.
Haben
als1) Überlastungen erstellen und den Code zu duplizieren. Dies hat den Vorteil, dass ich den alten Code als veraltet markieren kann, aber offensichtlich ist der Duplizierungscode schlecht.
2) Ändern der Parameter IEnumerable: Dies hat den Vorteil, mit alten und neuen Code zu arbeiten, aber nicht typsicher, da es List<T1>
zu akzeptieren, wo es List<T2>
3) Re- sein sollte Schreiben der Methoden, um einen List<T>
Parameter zu nehmen und einen dünnen Wrapper zu schreiben, der einen ArrayList-Parameter übernimmt und die Elemente in ein neues List<T>
kopiert und dann die Hauptmethode aufruft. Dies hat auch den Vorteil, dass ich den alten Stilcode als veraltet markieren kann. Es wird eine leichte Leistung/GC-Treffer haben.
4) Erstellen von drei Überladungen. Eine private Methode, die IEnumerable und zwei öffentliche Wrapper-Methoden (eine für ArrayList und eine für List<T>
), die nur die private Methode aufrufen. Dies hat auch den Vorteil, dass ich den alten Code als veraltet markieren kann. Nicht sicher, ob es irgendwelche Nachteile außer drei Methoden hat.
Ich bin auf 4 gelehnt, aber übersehe ich irgendetwas?
Diese Antwort scheint die Stimmen zu bekommen, also denke ich, es ist der Gewinner. Hatte nicht mit IEnumerable anstatt Liste in Betracht gezogen, aber es wäre die bessere Option. Ich denke, ich werde Joels Rat für jetzt folgen. Vielleicht, wenn die nicht-generischen Methoden noch in ein paar Monaten verwendet werden, werde ich tun, was ShuggyCoUk vorschlägt, so dass der Compiler anfängt, sich zu beschweren. –
sgmoore