2008-11-29 14 views
6

Sto migrando un'app 1.1 winforms a 2.0. quali sono le cose principali che dovrei immediatamente cambiare a causa dei farmaci generici. Ecco quello che ho finora:Trasferirsi in generici.

  1. sostituire tutte le tabelle hash con i dizionari generici
  2. Sostituire tutte ArrayLists con la lista <>
  3. Sostituire tutti CollectionBase derivare classi con: Lista <>

Tutti gli altri che dovrebbe essere fatto immediatamente?

thks, ak

risposta

7

Eventuali altri che dovrebbe essere fatto subito?

In genere, modificare qualsiasi menzione di IEnumerable a IEnumerable<T>, ove possibile. La migrazione può essere molto utile cambiando l'intero spazio dei nomi, ovvero un- import ing System.Collections in ogni file e importando invece System.Collections.Generic.

Inoltre, cercare le citazioni di object e/o l'uso del pugilato nel codice e considerare se questo è ancora appropriato o deve essere sostituito da generici.

Come jalf mi ha ricordato nei commenti, un altro cambiamento importante è il passaggio alla versione generica di IComparable dove applicabile.

+0

E allo stesso modo, IComparable con IComparable jalf

+0

@jalf, grazie, completamente dimenticato di quello. –

3

Le collezioni generiche sono decisamente preferite per la loro espressività. Una cosa da tenere a mente se il passaggio dalle raccolte non generiche è che a volte il comportamento potrebbe essere diverso da quello che ci si aspetta. Ad esempio, l'utilizzo dell'indicizzatore su un Hashtable rispetto a un dizionario agirà in modo diverso per i valori che non sono presenti. Hashtable restituirà null mentre il dizionario genererà.

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 

Un modo comune per gestire questa situazione è quello di utilizzare la seguente tecnica:

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

questo apparirà solo in fase di esecuzione quindi vale la pena conoscere prima del tempo.

8

Non penso che qualcosa dovrebbe essere fatto immediatamente! Il codice 1.1 funziona, giusto? Qual è il business case per lo scambio all'ingrosso di farmaci generici? Compilare l'app sotto 2.0, farlo funzionare e testato. E poi, poiché sono necessarie nuove funzionalità che consentono di sfruttare bene i generici, implementare tali funzionalità come generici.

+0

Questo è quello che stavo pensando quando ho letto la domanda. Non cambiare nulla se non devi. Quando vai a scrivere un nuovo codice, inizia a usare i generici, o se stai facendo delle modifiche al codice esistente, quindi passa ai generici. Ma non provare a cambiare tutto tutto in una volta. – Kibbee

2

Vedere il nuovo libro di Bill Wagner More Effective C#. Ci sono molti ottimi consigli per passare ai generici.

0

Non è consigliabile utilizzare List<T> anziché CollectionBase. Invece, Collection<T> ti offre sostituzioni analoghe.

0

a meno che non si dispone già di una suite di test di unità con la copertura del codice eccellente, non cambiano nulla inutilmente

altrimenti si è solo in cerca di guai, per non parlare di inventare busywork ...