2008-11-29 14 views
6

Estoy migrando una aplicación de Windows Forms 1.1 a 2.0. ¿Cuáles son las cosas principales que debería cambiar inmediatamente debido a los genéricos? Aquí lo que tengo hasta ahora:Mudarse a los genéricos.

  1. sustituyen a todas las tablas hash con los diccionarios genéricos
  2. Reemplazar todos ArrayLists con la lista <>
  3. Reemplazar todo CollectionBase derivar clases con: Lista <>

Las demás eso debe hacerse de inmediato?

thks, ak

Respuesta

7

Cualesquiera otras que se deben hacer de inmediato?

En general, cambie cualquier mención de IEnumerable a IEnumerable<T>, cuando sea posible. La migración puede ser ayudado en gran medida por el cambio de todo el espacio de nombres, es decir, in- import ing System.Collections en todos los archivos y en lugar de importar System.Collections.Generic.

Además, busque las menciones de object y/o el uso del boxeo en su código y considere si esto sigue siendo apropiado o debe ser reemplazado por genéricos.

Como JALF me ha recordado en los comentarios, otro cambio importante es el cambio a la versión genérica de IComparable en su caso.

+0

Y del mismo modo, IComparable con IComparable jalf

+0

@jalf, gracias, se olvidó completamente de eso. –

3

colecciones genéricas son definitivamente preferidos debido a su expresividad. Una cosa a tener en cuenta si el cambio de las colecciones no genéricas es que a veces el comportamiento puede ser diferente de lo que esperaba. Por ejemplo, usar el indexador en un Hashtable vs. un diccionario actuará de manera diferente para los valores que no están presentes. Hashtable devolverá nulo mientras Dictionary lanzará.

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 

Una forma común de manejar esto es usar la siguiente técnica:

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

mismo se mostrará solamente en tiempo de ejecución por lo que vale la pena saber de antemano.

8

No creo que se debería hacer algo de inmediato! El código 1.1 funciona, ¿verdad? ¿Cuál es el caso de negocios para el intercambio al por mayor a los genéricos? Compile la aplicación en 2.0, hágalo funcionar y pruebe. Y luego, a medida que se necesitan nuevas funciones que le permitan explotar bien los genéricos, implemente esas características como genéricos.

+0

Esto es lo que estaba pensando al leer la pregunta. No cambies nada si no tienes que hacerlo. Cuando vaya a escribir un nuevo código, comience a usar los genéricos, o si está haciendo cambios al código existente, luego cambie a los genéricos. Pero no intentes cambiar todo de una vez. – Kibbee

2

nuevo libro de Bill Wagner Ver More Effective C#. Hay muchos buenos consejos para pasar a los genéricos.

0

yo no recomendaría el uso de List<T> en lugar de CollectionBase. En cambio, Collection<T> le da anulaciones comparables.

0

menos que ya tenga un conjunto de pruebas unitarias con una excelente cobertura de código, no cambian nada innecesariamente

lo contrario, están metiendo en problemas, por no hablar de la invención de busywork ...

Cuestiones relacionadas