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