CA1305: IFormatProvider belirtme

Özellik Değer
Kural Kimliği CA1305
Başlık IFormatProvider belirt
Kategori Globalleştirme
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Hayır

Neden

Bir bağımsız değişkeni kabul System.IFormatProvider eden aşırı yükleme içeren bir yönteme çağrı yapılır ve bu aşırı yükleme çağrılmaz.

Bu kural, parametresi yoksayılıyor olarak belgelenen .NET yöntemlerine yapılan IFormatProvider çağrıları yoksayar. Kural aşağıdaki yöntemleri de yoksayar:

Kural açıklaması

Bir System.Globalization.CultureInfo veya IFormatProvider nesnesi sağlanmadığında, aşırı yüklenmiş üye tarafından sağlanan varsayılan değer tüm yerel ayarlarda istediğiniz etkiye sahip olmayabilir. Ayrıca. .NET üyeleri, kodunuz için doğru olmayabilecek varsayımlara göre varsayılan kültürü ve biçimlendirmeyi seçer. Kodun senaryolarınızda beklendiği gibi çalıştığından emin olmak için aşağıdaki yönergelere göre kültüre özgü bilgiler sağlamanız gerekir:

  • Değer kullanıcıya görüntülenecekse geçerli kültürü kullanın. Bkz. CultureInfo.CurrentCulture.

  • Değer yazılım tarafından depolanacak ve erişilecekse (bir dosyada veya veritabanında kalıcı olarak), sabit kültürü kullanın. Bkz. CultureInfo.InvariantCulture.

  • Değerin hedefini bilmiyorsanız, veri tüketicisinin veya sağlayıcısının kültürü belirtmesini sağlayın.

Aşırı yüklenmiş üyenin varsayılan davranışı gereksinimlerinize uygun olsa bile kodunuzun kendi kendine belgelenmesi ve daha kolay korunması için kültüre özgü aşırı yüklemeyi açıkça çağırmak daha iyidir.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için bağımsız değişken alan IFormatProvider aşırı yüklemeyi kullanın. Alternatif olarak, sabit kültürü kullanmak için C# ilişkilendirmeli bir dize kullanın ve ile birlikte CultureInfo.InvariantCultureiletinString.Create(IFormatProvider, DefaultInterpolatedStringHandler), örneğin:

string.Create(CultureInfo.InvariantCulture, $"{major}.{minor}.{build}.{revision}");

Uyarıların ne zaman bastırılması gerekiyor?

Varsayılan biçimin doğru seçim olduğundan ve kod bakımının önemli bir geliştirme önceliği olmadığından emin olduğunda, bu kuraldan gelen bir uyarıyı bastırmak güvenlidir.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

#pragma warning disable CA1305
// The code that's violating the rule is on this line.
#pragma warning restore CA1305

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

[*.{cs,vb}]
dotnet_diagnostic.CA1305.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Çözümlemek için kod yapılandırma

Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçenekleri kullanın.

Bu seçenekleri yalnızca bu kural, geçerli olduğu tüm kurallar veya bu kategorideki (Genelleştirme) tüm kurallar için yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.

Belirli simgeleri hariç tutma

Türler ve yöntemler gibi belirli simgeleri analizden hariç tutabilirsiniz. Örneğin, kuralın adlı MyTypetürlerdeki herhangi bir kodda çalışmaması gerektiğini belirtmek için, projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:

dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType

Seçenek değerinde izin verilen simge adı biçimleri (ile |ayrılmış):

  • Yalnızca sembol adı (içeren tür veya ad alanı ne olursa olsun, ada sahip tüm simgeleri içerir).
  • Simgenin belge kimliği biçimindeki tam adlar. Her simge adı için yöntemlerT:, türler ve N: ad alanları gibi M: bir sembol türü ön eki gerekir.
  • .ctor oluşturucular ve .cctor statik oluşturucular için.

Örnekler:

Seçenek Değeri Özet
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType adlı MyTypetüm simgelerle eşleşir.
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 veya MyType2adlı MyType1 tüm simgelerle eşleşir.
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) Belirtilen tam imza ile belirli bir yöntemi MyMethod eşleştirir.
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) Belirli yöntemlerle MyMethod1 ve MyMethod2 ilgili tam imzalarla eşleşir.

Belirli türleri ve türetilmiş türlerini dışlama

Belirli türleri ve türetilmiş türlerini analizden dışlayabilirsiniz. Örneğin, kuralın adlı MyType ve türetilmiş türleri içindeki hiçbir yöntemde çalışmaması gerektiğini belirtmek için, projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:

dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType

Seçenek değerinde izin verilen simge adı biçimleri (ile |ayrılmış):

  • Yalnızca tür adı (içeren tür veya ad alanına bakılmaksızın adı olan tüm türleri içerir).
  • Simgenin belge kimliği biçiminde, isteğe bağlı T: ön ek içeren tam adlar.

Örnekler:

Seçenek Değeri Özet
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType Adlı MyType tüm türleri ve türetilmiş türlerinin tümünü eşleştirir.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 veya MyType2 adlı MyType1 tüm türleri ve türetilmiş türlerinin tümünü eşleştirir.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType Belirli bir türü MyType verilen tam adla ve türetilmiş tüm türleriyle eşleştirir.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 Belirli türleri MyType1 ve MyType2 ilgili tam adlarla ve bunların türetilmiş tüm türleriyle eşleşir.

Örnek

Aşağıdaki kodda example1 , dize CA1305 kuralını ihlal eder. Dize, example2 ca1305 kuralını yerine getirmek CultureInfo.CurrentCultureiçin öğesini uygulayan IFormatProvideröğesini iletir String.Format(IFormatProvider, String, Object). Dize, example3 ile CultureInfo.InvariantCulturebirlikte ilişkilendirilmiş bir dize String.Create(IFormatProvider, DefaultInterpolatedStringHandler) geçirerek CA1305 kuralını karşılar.

string name = "Georgette";

// Violates CA1305
string example1 = string.Format("Hello {0}", name);

// Satisfies CA1305
string example2 = string.Format(CultureInfo.CurrentCulture, "Hello {0}", name);

// Satisfies CA1305
string example3 = string.Create(CultureInfo.InvariantCulture, $"Hello {name}");

Ayrıca bkz.