2008-11-29 16 views
6

Ich bin eine 1.1 Winforms App auf 2.0 migrieren. Was sind die wichtigsten Dinge, die ich sofort wegen Generika ändern sollte. Hier ist, was ich bisher:Wechsel zu Generika.

  1. Ersetzen Sie alle Hash-Tabellen mit allgemeinen Wörterbücher
  2. Ersetzen Sie alle Arraylisten mit Liste <>
  3. Alle ersetzen Collection ableiten Klassen mit: Liste <>

Alle anderen Das sollte sofort gemacht werden?

thks, ak

Antwort

7

andere, die sofort getan werden sollte?

Im Allgemeinen, wenn möglich, alle Erwähnungen von IEnumerable zu IEnumerable<T> ändern. Die Migration kann sehr hilfreich sein, wenn der gesamte Namensraum, d. H. import, in jede Datei getauscht und stattdessen System.Collections.Generic importiert wird.

Suchen Sie auch nach Erwähnungen von object und/oder Verwendung von Boxen in Ihrem Code und prüfen, ob dies noch angemessen ist oder durch Generika ersetzt werden sollte.

Als JALF mich in den Kommentaren erinnert, eine weitere wichtige Änderung ist die Umstellung auf die generische Version von IComparable wo anwendbar.

+0

Und ähnlich, IComparable mit IComparable jalf

+0

@jalf, danke, komplett vergessen, dass. –

3

Generische Sammlungen sind aufgrund ihrer Aussagekraft definitiv bevorzugt. Eine Sache, die Sie im Auge behalten sollten, wenn Sie von den nicht generischen Sammlungen abweichen, ist, dass das Verhalten manchmal anders ist als erwartet. Wenn Sie beispielsweise den Indexer einer Hashtable-Datei im Vergleich zu einem Dictionary verwenden, wirkt sich dies bei nicht vorhandenen Werten anders aus. Hashtable gibt null zurück, während Dictionary wirft.

Hashtable ht = new Hashtable(); 
ht.Add(1, "one"); 
string s1 = ht[1; // s1="one" 
string s2 = ht[2]; // s2=null 

var dic = new Dictionary<int, string>(); 
dic.Add(1, "one"); 
string s1 = dic[1]; // s1="one" 
string s2 = dic[2]; // throws KeyNotFoundException 

Ein üblicher Weg, dies zu umgehen ist die folgende Technik zu verwenden:

string s = null; 
if (dic.TryGetValue(k, out s)) 
{ 
    // if we're here, k was found in the dictionary 
} 

Das oben nur zur Laufzeit zeigen wird, so dass es sich lohnt, im voraus zu wissen.

8

Ich denke nicht, dass irgendetwas sofort getan werden sollte! Der 1.1 Code funktioniert, oder? Was ist der Business Case für den Großhandelstausch mit Generika? Kompiliere die App unter 2.0, lass sie laufen und testen. Und wenn neue Features benötigt werden, mit denen Sie Generika gut ausnutzen können, sollten Sie diese Funktionen als Generika implementieren.

+0

Das habe ich beim Lesen der Frage gedacht. Ändern Sie nichts, wenn Sie es nicht müssen. Wenn Sie neuen Code schreiben, verwenden Sie Generika, oder wenn Sie Änderungen an vorhandenem Code vornehmen, wechseln Sie zu Generics. Aber versuchen Sie nicht, alles auf einmal zu ändern. – Kibbee

2

Siehe Bill Wagners neues Buch More Effective C#. Es gibt viele gute Tipps, um zu Generika zu wechseln.

0

Ich würde nicht List<T> anstelle von CollectionBase empfehlen. Stattdessen gibt Ihnen Collection<T> vergleichbare Überschreibungen.

0

, wenn Sie bereits eine Reihe von Unit-Tests mit ausgezeichneter Codeabdeckung haben, nichts ändern unnötig

sonst sind Sie nur Ärger bringen, nicht zu erwähnen busywork erfinden ...