Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| Properti | Nilai |
|---|---|
| ID Aturan | CA2241 |
| Judul | Sediakan argumen yang benar untuk metode pemformatan |
| Golongan | Penggunaan |
| Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
| Diaktifkan secara default di .NET 10 | Sebagai saran |
Penyebab
Argumen format string diteruskan ke metode seperti WriteLine, , Writeatau System.String.Format tidak berisi item format yang sesuai dengan setiap argumen objek, atau sebaliknya.
Secara default, aturan ini hanya menganalisis panggilan ke tiga metode yang disebutkan sebelumnya, tetapi ini dapat dikonfigurasi.
Deskripsi aturan
Argumen ke metode seperti WriteLine, , dan Write terdiri dari string format diikuti oleh beberapa Format instansSystem.Object. String format terdiri dari teks dan item format yang disematkan dari formulir {index[,alignment][:formatString]}. 'indeks' adalah bilangan bulat berbasis nol yang menunjukkan objek mana yang akan diformat. Jika objek tidak memiliki indeks yang sesuai dalam string format, objek diabaikan. Jika objek yang ditentukan oleh 'indeks' tidak ada, objek System.FormatException dilemparkan pada runtime.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran aturan ini, berikan item format untuk setiap argumen objek dan berikan argumen objek untuk setiap item format.
Kapan harus menekan peringatan
Jangan menyembunyikan peringatan dari aturan ini.
Mengonfigurasi kode yang akan dianalisis
Gunakan opsi berikut untuk mengonfigurasi metode tambahan untuk menjalankan aturan ini.
Metode pemformatan string tambahan
Anda dapat mengonfigurasi nama metode pemformatan string tambahan yang harus dianalisis oleh aturan ini. Misalnya, untuk menentukan semua metode bernama MyFormat sebagai metode pemformatan string, Anda dapat menambahkan pasangan kunci-nilai berikut ke file .editorconfig di proyek Anda:
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat
Format nama metode yang diizinkan pada nilai opsi (dipisahkan oleh |):
- Nama metode saja (mencakup semua metode dengan nama, terlepas dari jenis atau namespace layanan yang berisi)
- Nama yang sepenuhnya memenuhi syarat dalam format ID dokumentasi simbol, dengan awalan
M:opsional.
Contoh:
| Nilai Opsi | Ringkasan |
|---|---|
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat |
Cocok dengan semua metode yang dinamai MyFormat dalam kompilasi. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat1|MyFormat2 |
Cocok dengan semua metode bernama baik MyFormat1 atau MyFormat2 dalam kompilasi. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS.MyType.MyFormat(ParamType) |
Cocok dengan metode MyFormat tertentu dengan tanda tangan yang sepenuhnya memenuhi syarat. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS1.MyType1.MyFormat1(ParamType)|NS2.MyType2.MyFormat2(ParamType) |
Cocok dengan metode MyFormat1 tertentu dan MyFormat2 dengan masing-masing tanda tangan yang sepenuhnya memenuhi syarat. |
Menentukan metode pemformatan string tambahan secara otomatis
Alih-alih menentukan daftar eksplisit metode pemformatan string tambahan, Anda dapat mengonfigurasi penganalisis untuk secara otomatis mencoba menentukan metode pemformatan string. Secara default, opsi ini dinonaktifkan. Jika opsi diaktifkan, metode apa pun yang memiliki string format parameter diikuti oleh params object[] parameter dianggap sebagai metode pemformatan string:
dotnet_code_quality.CA2241.try_determine_additional_string_formatting_methods_automatically = true
Contoh
Contoh berikut menunjukkan dua pelanggaran aturan.
Imports System
Namespace ca2241
Class CallsStringFormat
Sub CallFormat()
Dim file As String = "file name"
Dim errors As Integer = 13
' Violates the rule.
Console.WriteLine(String.Format("{0}", file, errors))
Console.WriteLine(String.Format("{0}: {1}", file, errors))
' Violates the rule and generates a FormatException at runtime.
Console.WriteLine(String.Format("{0}: {1}, {2}", file, errors))
End Sub
End Class
End Namespace
class CallsStringFormat
{
void CallFormat()
{
string file = "file name";
int errors = 13;
// Violates the rule.
Console.WriteLine(string.Format("{0}", file, errors));
Console.WriteLine(string.Format("{0}: {1}", file, errors));
// Violates the rule and generates a FormatException at runtime.
Console.WriteLine(string.Format("{0}: {1}, {2}", file, errors));
}
}