Programador de C #, pruebe usted mismo - encuentre el error

El analizador PVS-Studio se actualiza periódicamente con nuevas reglas de diagnóstico. Curiosamente, los diagnósticos a menudo detectan fragmentos de código sospechosos antes de que finalice todo el trabajo. Por ejemplo, durante las pruebas en proyectos de código abierto. Uno de estos interesantes 'hallazgos' que me gustaría compartir con ustedes hoy.





Como se mencionó anteriormente, una de las etapas de la prueba de una regla de diagnóstico es verificar su funcionamiento en una base de código real. Para ello, se utiliza un conjunto de proyectos seleccionados de código abierto, para lo cual se realiza el análisis. La ventaja obvia de este enfoque es la capacidad de ver cómo se comporta la regla de diagnóstico en "condiciones reales". Menos obvio: a veces hay algo tan interesante que no es pecado escribir una nota al respecto.





, Bouncy Castle C# :





public static string ToString(object[] a)
{
  StringBuilder sb = new StringBuilder('[');
  if (a.Length > 0)
  {
    sb.Append(a[0]);
    for (int index = 1; index < a.Length; ++index)
    {
      sb.Append(", ").Append(a[index]);
    }
  }
  sb.Append(']');
  return sb.ToString();
}

      
      



, , , .





, IDE StringBuilder. :





StringBuilder sb = new StringBuilder('[');

      
      



, PVS-Studio: V3165 Character literal '[' is passed as an argument of the 'Int32' type whereas similar overload with the string parameter exists. Perhaps, a string literal should be used instead. Arrays.cs 193.





StringBuilder, '['. - 91 , .





- , , :





....
public StringBuilder(int capacity);
public StringBuilder(string? value);
....

      
      



'[' int (91 Unicode). int, . , .





(.. "[", '['), .





, . , , char, , , .





, , PVS-Studio 7.11. V3165, C, C++, C# Java.





, . - Krypt Habr. - !





P.S. . , - , .





, : Valery Komarov. C# Programmer, It's Time to Test Yourself and Find Error.








All Articles