Pregunta

Estamos en el proceso de actualizar nuestros proyectos de C# 2.0/VS2005 a C# 3.0/VS2008.Como parte de la actualización, estamos agregando algunos elementos a nuestro documento de estándares de codificación.

¿Cómo cambiaría (o cambió) su documento de estándares de codificación al actualizar de C# 2.0/VS2005 a C# 3.0/VS2008?

¿Fue útil?

Solución

Podrías/deberías dar consejos sobre:

  • Cuándo utilizar expresiones de consulta frente a notación de puntos
  • Cualquier restricción en el uso de expresiones lambda (p. ej."no modificar las variables capturadas).(Esto también podría aplicarse a métodos anónimos en C# 2, por supuesto).
  • Cuándo escribir métodos de extensión
  • Cuándo utilizar variables escritas implícitamente (var)

Los dos últimos causan cierta controversia, particularmente var.

Si sus convenciones brindan pautas de diseño, le sugiero que también aconseje a los programadores que consideren el uso de delegados para la especialización donde anteriormente podrían haber usado herencia o interfaces.Un buen ejemplo de esto es la clasificación: es más fácil (y más legible) usar una proyección para especificar un orden de clasificación que escribir una implementación de IComparer<T>.

Otros consejos

La actualización coincidió con un nuevo proyecto, así que cuando nos mudamos comenzamos a usar herramientas como StyleCop y FxCop que alteraron nuestros estándares de codificación. También los aplica fácilmente: o)

Nada debería cambiar per se debido a la actualización, aunque es posible que deba observar los estándares de codificación en torno a nuevas características, como expresiones LINQ, diseño, Lambda versus sintaxis de consulta.

Mi motivo favorito personal es el uso de var donde sea " posible " ;.

" Posible " actualmente se define como uno de los siguientes casos, principalmente en orden decreciente de pulcritud:

Obvio, ayudando a SECAR:

var obj1 = new Something();
var obj2 = (Something)ObscureFunction();
var obj3 = ObscureStuff() as Something;

Guardado, no me importa mientras se compile:

var obj4 = ObscureFunction();
foreach(Something s in obj4) { ... }

Genéricos complejos y casi cualquier resultado LINQ:

var obj5 = ctx.GetQuery<Something>()..ToList(..)..GroupJoin(..)...ToLookup(...);

Mis estándares para nuevas funciones para 2008:

  • Use var con moderación solo con tipos anónimos.
  • Fomentar el uso de expresiones lambda sobre delegados.
  • Use solo métodos de extensión cuando no tenga control del código fuente
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top