2009-07-27 12 views

Respuesta

3

Sin duda es posible hacer esto, aunque no es tan simple como simplemente cambiar una configuración. Debería escribir un complemento de Visual Studio para lograr esto.

Visita http://msdn.microsoft.com/en-us/vsx/bb980955.aspx para comenzar. Como otros señalarán. Esto no es para los débiles de corazón.

Aquí hay un enlace que puede apuntar hacia lo que busca: http://msdn.microsoft.com/en-us/library/bb166778.aspx

+0

buenos puntos. aquí hay otro buen enlace http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.textmanager.interop.ivshicoloritem.aspx –

+0

Solía ​​programar objetos ATL COM. No soy pusilánime. – quillbreaker

1

No puede. Esto requeriría soporte de servicio de idioma y ni C# ni VB.Net proporcionan esta funcionalidad.

Can not probablemente sea demasiado fuerte. Sin duda, es posible hacer esto con un complemento que hace una inspección profunda del código y determina las jerarquías. Sin embargo, es una tarea no muy trivial.

0

Claro, no es un gran conjunto de herramientas para crear extensiones de VS, see Visual Studio 2008 SDK 1.1 Pero el tiempo necesario para construir un complemento tales se requieren más tiempo que usted pasará examinando componentes y determinando si son Desechables o no

0

No estoy seguro, si FXCop o StyleCop pueden hacer esto ya. Pero entonces, será una sugerencia/advertencia posterior a la compilación.

Resharper sugiere esto, supongo.

0

Tal vez yo soy una mala persona para hacer esto, pero yo he estado utilizando este pedazo de código recientemente:

public static void BulkDispose(object[] objects) 
{ 
    foreach (object o in objects) 
    { 
    if (o != null) 
    { 
     if (o is IDisposable) 
     { 
     IDisposable disposable = o as IDisposable; 
     disposable.Dispose(); 
     } 
    } 
    } 
} 
+0

No es infrecuente que Dispose arroje excepciones ("ya desechado"), por lo que desearía que cada llamada a disposición finalice en un try/catch. –

+0

Eliminar shoud * never * throw debido a múltiples llamadas. Si lo hace, el componente en cuestión no cumple con el contrato IDisposable. Consulte https://msdn.microsoft.com/en-us/library/system.idisposable.dispose.aspx en Observaciones: "El objeto no debe lanzar una excepción si su método Dispose se llama varias veces". – bernhof

7

Supongo que esto será más fácil/sin extensión vez Roslyn sale, pero esto actualmente no es fácil porque no se puede acceder fácilmente al código como C# desde una extensión.

En Resharper ¡es fácil, sin embargo! Mi ejemplo fue probado en ReSharper 9.0. Lamentablemente, no hay una manera fácil de darte esto.

  • ReSharper -> Opciones -> Código de Inspección -> Patrones personalizados -> Añadir, popsup de diálogo
  • Seleccionar C# (parte superior izquierda)
  • Seleccione "Find" (parte superior derecha)
  • Añadir el patrón de la gravedad de new $disp$($args$)
  • patrón: Mostrar como sugerencia
  • Descripción: construcción desechable
  • "Agregar marcador de posición" de tipo: tipo, nombre: disp, escribe: Sistema.IDisposable
  • "Añadir marcador de posición" de tipo: Argumentos, nombre: args

Guardar y usted ahora recibe una "sugerencia" siempre que un nuevo desechable se está construyendo.

Agregando el patrón $disp$ $var$ = $exp$; también podría ser útil. Todas las cosas iguales con exp se definen como una expresión.

enter image description here

Cuestiones relacionadas