2009-09-28 6 views
17

Estoy revisando algunos códigos.C#: Encontrar todos los bloques de captura vacíos

He notado algunos bloques de captura vacíos. No es una buena idea ya que algunas cosas no funcionan y no se puede ver por qué.

¿Hay una manera fácil de encontrar todos los bloques de captura de prueba vacíos en una solución?

EDITAR

Gracias por todas las respuestas.

Se utilizó el ejemplo dado por Stefan. Tuve que hacer algunas variaciones, hay muchas formas de escribir bloques de captura vacíos. También una simple búsqueda de catch (Exception) encontró varios errores.

+0

Sólo un FYI - no todos los bloques de captura vacíos son malos. Algunas veces, el desarrollador está buscando una excepción específica precisamente para que la excepción pueda ser ignorada. –

+0

@Matt, gracias, de acuerdo con usted, pero luego tenemos una regla que el desarrollador debe agregar un comentario para confirmar que se ha hecho con intención. –

+0

@Matt - pero catch (Exception) casi siempre es malo. – TrueWill

Respuesta

22

Uso usar el cuadro de diálogo de búsqueda global, encienda las expresiones regulares y luego buscar:

catch:b*\([^)]*\):b*\{:b*\} 
+0

Gracias, que es un ahorro de tiempo real –

+0

FxCop o ReSharper sería excesivo solo para try/catch vacío, ¡buen pensamiento! – jrummell

+2

La respuesta anterior no funcionó para mí, pero esto sí "capturó (\ (. * Exception. * \)) *: Wh * \ {: Wh * \}" sin las comillas. – UnhandledExcepSean

5

¿Tiene ReSharper? Esto debería incluir los problemas encontrados en el código.

+0

No he encontrado dónde ni cómo hacerlo en ReSharper ... ¿cómo lo harías? – yeyeyerman

+0

Aparece como una advertencia con ReSharper, pero creo que debe tener el archivo de código abierto para verlo. – jrummell

+0

Por extraño que parezca, encontré uno de estos en algún código el otro día.Usamos FxCop y ReSharper; alguien había suprimido explícitamente la advertencia de FxCop (por lo que no apareció en la compilación de integración continua) e ignoró la de ReSharper. No puedes hacer mucho sobre eso. : P – TrueWill

7

FxCop los encontrará junto con muchos otros problemas potenciales.

+1

¿Puedes nombrar la regla que atrapa bloques de captura vacíos? – slolife

2

Aquí es una expresión regular que también encuentra coger bloques con sólo dentro de comentarios:

catch:b*\([^)]*\)[:b\n]*\{([:b\n]|(\/\*[^*]*\*\/)|(//[^\n]*))*\} 
2

, gracias a Stefan por la sugerencia de Regex. He descubierto que la expresión regular sugerido no encuentra bloques de captura en los que no se especifica la excepción, es decir:

catch { } 

pellizqué Stefan ligeramente para hacer que el aparato ortopédico excepción opcional:

catch:b*(\([^)]*\))*:b*\{:b*\} 
5

Además ampliado las tres soluciones por encima de incluir cláusulas cuando las llaves no están en la misma línea que la captura y donde la cláusula catch contiene sólo una sola línea cita:

catch:b*(\([^)]*\))*:b*[ \n\r\t]*\{:b*([ \n\r\t.]|(\/*[^]*\/)|(//.*$))*\} 
+1

+1 Gracias y bienvenido a stackoverflow –

1

Presione Ctrl + Shift + F. Expandir Encuentra opciones. Verificar uso de expresiones regulares Pega esta expresión regular.

catch\s*(\(\s*Exception(\s*\w+)?\))?\s*\{\s*\} 
+1

Agregué los detalles para responder. – bobah75

Cuestiones relacionadas