C # programmer, uji diri Anda - temukan kesalahannya

Penganalisis PVS-Studio diperbarui secara berkala dengan aturan diagnostik baru. Menariknya, diagnostik sering mendeteksi fragmen kode yang mencurigakan sebelum semua pekerjaan berakhir. Misalnya, selama pengujian pada proyek sumber terbuka. Salah satu 'penemuan' menarik ini ingin saya bagikan kepada Anda hari ini.





Seperti disebutkan di atas, salah satu tahapan pengujian aturan diagnostik memeriksa operasinya pada basis kode nyata. Untuk ini, satu set proyek sumber terbuka yang dipilih digunakan, yang analisisnya dilakukan. Keuntungan nyata dari pendekatan ini adalah kemampuan untuk melihat bagaimana aturan diagnostik berperilaku dalam "kondisi nyata". Kurang jelas - terkadang ada sesuatu yang begitu menarik sehingga menulis catatan tentang hal itu bukanlah dosa.





Jadi, saya mengusulkan untuk melihat kode dari proyek Bouncy Castle C # dan menemukan kesalahan di dalamnya:





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();
}

      
      



Bagi yang suka mengungkit, saya telah menambahkan gambar untuk menjaga intrik.





Saya yakin banyak yang tidak dapat menemukan kesalahan tanpa membuka IDE atau dokumentasi untuk kelas StringBuilder . Kesalahan dibuat saat memanggil konstruktor:





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