CA2241: Memberikan argumen yang benar untuk metode pemformatan
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 8 | 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 Format terdiri dari string format diikuti oleh beberapa System.Object instansWrite. 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 waktu proses.
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));
}
}
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk