CA2241: Biçimlendirme yöntemlerine doğru bağımsız değişkenleri sağlayın
Özellik | Değer |
---|---|
Kural Kimliği | CA2241 |
Başlık | Biçimlendirme metotlarına doğru bağımsız değişkenleri sağlayın |
Kategori | Kullanım |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Öneri olarak |
Neden
format
, veya gibi WriteLineWritebir yönteme geçirilen dize bağımsız değişkeni, System.String.Format 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ı
, WriteLineve Write gibi Formatyöntemlerin bağımsız değişkenleri bir biçim dizesini ve ardından birkaç System.Object örneği 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. Bir nesnenin biçim dizesinde karşılık gelen bir dizini 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.
Çözümlemek için kod yapılandırma
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 adlı MyFormat tüm yöntemlerle eşleşir. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat1|MyFormat2 |
Derlemede veya MyFormat1 adlı MyFormat2 tüm yöntemlerle eşleşir. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS.MyType.MyFormat(ParamType) |
Belirli bir yöntemi MyFormat verilen tam imzayla eşleştirir. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS1.MyType1.MyFormat1(ParamType)|NS2.MyType2.MyFormat2(ParamType) |
Belirli yöntemlerle MyFormat1 ve MyFormat2 ilgili tam imzayla 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, parametresi ve ardından parametresi olan herhangi bir string format
params object[]
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));
}
}