#152 · Herramienta para desarrolladores

C# Inspector

Pasa un fragmento C# por una inspección local centrada en señales que suelen merecer revisión: async void fuera de eventos, esperas síncronas de Task, catch vacíos, SQL concatenado, campos públicos mutables y otros patrones. Cada hallazgo incluye línea, severidad y una acción sugerida. El resultado ayuda a priorizar una revisión humana, pero no pretende reemplazar analizadores de Roslyn.

Datos de entrada

Código fuente
Espacio publicitario

Cómo usar esta herramienta para desarrolladores

  1. Pega el contenido en el área de entrada o carga un archivo local.
  2. Revisa que el fragmento corresponda al lenguaje y propósito de esta página.
  3. Pulsa el botón principal o usa Ctrl/Cmd + Enter.
  4. Lee el resumen y las métricas antes de copiar o descargar el resultado.

Qué hace esta herramienta para desarrolladores

Los hallazgos indican patrones que merecen revisión por mantenibilidad, asincronía, encapsulación o seguridad.

Aplicación de un conjunto explícito de reglas locales con posición de línea, severidad y recomendación.

El procesamiento se realiza en el navegador. Revisa el resultado en el contexto real de tu proyecto antes de aplicarlo.

Ejemplo

Prueba el botón Ejemplo para cargar un caso representativo de C# Inspector. La salida mostrará exactamente las métricas y el formato que genera la lógica implementada.

using System;
using System.Data.SqlClient;
using System.Threading.Tasks;

public class Servicio
{
    public string Estado;

    public async void Cargar()
    {
        try { var x = Task.Run(() => 42).Result; } catch { }
        var sql = "SELECT * FROM users WHERE id=" + Estado;
        Console.WriteLine(sql);
    }
}

Casos de uso

  • Revisar fragmentos antes de incorporarlos a una rama o documentación.
  • Preparar ejemplos técnicos para una incidencia, revisión de código o tutorial.
  • Obtener un resultado copiable sin instalar herramientas adicionales.
  • Comparar rápidamente la estructura de archivos pequeños durante una depuración.

Consejos para obtener resultados fiables

  • Usa fragmentos completos cuando quieras reducir falsos positivos de patrones parciales.
  • Conserva comentarios relevantes: pueden cambiar la interpretación humana del resultado.
  • No tomes una coincidencia textual como prueba definitiva de un defecto.
  • Compila y ejecuta las pruebas del proyecto después de cualquier cambio sugerido.
  • Para análisis semántico profundo, complementa la revisión con herramientas del ecosistema del lenguaje.

Detalles del procesamiento

La herramienta usa únicamente APIs estándar del navegador y lógica JavaScript incluida en la página. No necesita bibliotecas de análisis externas ni un servicio remoto para producir su salida.

C# y C++ tienen gramáticas y reglas semánticas extensas. Las extracciones y comprobaciones heurísticas pueden no reconocer macros, plantillas, generadores de código, sintaxis nueva o construcciones poco comunes.

Preguntas frecuentes

¿Cómo detectar async void y Task.Result en código C# desde el navegador?

Pega el fragmento y ejecuta la inspección. Cada coincidencia incluye la línea y una sugerencia concreta.

¿Por qué el inspector marca una consulta SQL construida por concatenación en C#?

Porque concatenar datos en SQL puede introducir errores y, si interviene entrada no confiable, riesgo de inyección; se recomiendan parámetros.

¿Qué significa que un catch vacío aparezca como hallazgo de severidad alta?

Indica un patrón que puede ocultar fallos y dificultar el diagnóstico, por eso conviene revisarlo primero.

¿El inspector C# puede encontrar todos los problemas que detectan los analizadores Roslyn?

No. Las reglas son un subconjunto textual y no disponen del modelo semántico de Roslyn.

¿Cómo debo revisar un campo público mutable señalado por el inspector C#?

Comprueba si necesita escritura externa; en muchos casos una propiedad o un campo privado expresa mejor la encapsulación.

Resumen del módulo

ComponenteComportamiento
EntradaProcesamiento local en texto
SalidaResultado copiable y descargable
PrivacidadSin envío necesario para la función principal