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 8'de 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ı

, Writeve Format gibi WriteLineyö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 MyFormat2 adlı MyFormat1 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 formatparams 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));
    }
}