Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA2241 |
| Başlık | Biçimlendirme metotlarına uygun bağımsız değişkenleri sağlayın |
| Kategori | Kullanım |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Öneri olarak |
| Geçerli diller | C# ve Visual Basic |
Neden
format, WriteLine, Write ya da System.String.Format gibi yöntemlere geçirilen dize bağımsız değişkeni, her nesne bağımsız değişkenine karşılık gelen bir biçim öğesi içermiyor veya tam tersi.
Varsayılan olarak, bu kural yalnızca daha önce bahsedilen üç yönteme yapılan çağrıları analiz eder, ancak bu yapılandırılabilir.
Kural açıklaması
Gibi WriteLine, Write ve Format yöntemlerinin bağımsız değişkenleri, bir biçem dizesi ve ardından birkaç System.Object örneğinden oluşur. Biçim dizesi, biçimindeki {index[,alignment][:formatString]}metin ve eklenmiş biçim öğelerinden oluşur. 'index', hangi nesnelerin biçimlendirildiğini gösteren sıfır tabanlı bir tamsayıdır. Biçim dizesinde karşılık gelen bir dizin yoksa, nesne yoksayılır. 'index' tarafından belirtilen nesne yoksa, çalışma zamanında bir System.FormatException oluşturulur.
İhlalleri düzeltme
Bu kuralın ihlalini düzeltmek için, her nesne bağımsız değişkeni için bir biçim öğesi sağlayın ve her biçim öğesi için bir nesne bağımsız değişkeni sağlayın.
Uyarıların ne zaman bastırılması gerekiyor?
Bu kuraldan uyarıyı bastırmayın.
Kod çözümleme için konfigüre et
Bu kuralın üzerinde çalıştırılacak ek yöntemleri yapılandırmak için aşağıdaki seçenekleri kullanın.
Ek dize biçimlendirme yöntemleri
Bu kural tarafından analiz edilmesi gereken ek dize biçimlendirme yöntemlerinin adlarını yapılandırabilirsiniz. Örneğin, dize biçimlendirme yöntemleri olarak adlandırılan MyFormat tüm yöntemleri belirtmek için projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyebilirsiniz:
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat
Seçenek değerinde izin verilen yöntem adı biçimleri (ile |ayrılmış):
- Yalnızca yöntem adı (içeren tür veya ad alanı ne olursa olsun, ada sahip tüm yöntemleri içerir)
- Simgenin belge kimliği biçiminde, isteğe bağlı
M:ön ek içeren tam adlar.
Örnekler:
| Seçenek Değeri | Özet |
|---|---|
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat |
Derlemede MyFormat adlı tüm yöntemleri eşleştirir. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat1|MyFormat2 |
Derlemede MyFormat1 veya MyFormat2 olarak adlandırılan tüm yöntemlerle eşleşir. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS.MyType.MyFormat(ParamType) |
Belirli bir metodu MyFormat verilen tam nitelikli imzayla eşleştirir. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS1.MyType1.MyFormat1(ParamType)|NS2.MyType2.MyFormat2(ParamType) |
Belirli yöntemler MyFormat1 ve MyFormat2 ile, ilgili tam nitelikli imzalarla eşleşir. |
Ek dize biçimlendirme yöntemlerini otomatik olarak belirleme
Ek dize biçimlendirme yöntemlerinin açık bir listesini belirtmek yerine, çözümleyiciyi otomatik olarak dize biçimlendirme yöntemini belirlemeyi deneyecek şekilde yapılandırabilirsiniz. Varsayılan olarak, bu seçenek devre dışıdır. Seçenek etkinleştirilirse, string format parametresini ve ardından params object[] parametresini içeren herhangi bir yöntem, dize biçimlendirme yöntemi olarak kabul edilir:
dotnet_code_quality.CA2241.try_determine_additional_string_formatting_methods_automatically = true
Örnek
Aşağıdaki örnekte kuralın iki ihlali gösterilmektedir.
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));
}
}