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 | CA1305 |
| Başlık | IFormatProvider belirtin |
| Kategori | Globalleştirme |
| Düzeltme bozucu veya bozucu olmayan bir etkisi olabilir | Kaydırmaz |
| .NET 10'da varsayılan olarak etkin | Hayır |
| Geçerli diller | C# ve Visual Basic |
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ılan olarak belgelenen .NET yöntemlerine yapılan IFormatProvider çağrılarını yok sayar. Kural aşağıdaki yöntemleri de yoksayar:
- Activator.CreateInstance
- ResourceManager.GetObject
- ResourceManager.GetString
- Boolean.ToString
- Char.ToString
- Guid.ToString
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# interpolasyonlu bir dize kullanın ve String.Create(IFormatProvider, DefaultInterpolatedStringHandler) ile birlikte CultureInfo.InvariantCulture'e iletin, ö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.
Analiz için kodu yapılandır
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, uyguladıkları tüm kurallar veya bu kategorideki tüm kurallar (Genelleştirme) için yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.
Belirli simgeleri hariç tutma
excluded_symbol_names seçeneğini ayarlayarak 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
Not
XXXX
CAXXXX bölümünü geçerli kuralın kimliğiyle değiştirin.
Seçenek değerinde izin verilen simge adı biçimleri (ile |ayrılmış):
- Yalnızca sembol adı (tür veya ad alanı ne olursa olsun, ada sahip olan tüm sembolleri içerir).
- Simgenin tam adları, dokümantasyon kimliği biçiminde bulunur. Her simge adı, metotlar için
M:, türler içinT:, ve ad alanları içinN:gibi bir simge türü ön eki gerektirir. -
.ctoroluşturucular ve.cctorstatik 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 |
MyType1 veya MyType2 olarak adlandırılan 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öntemler MyMethod1 ve MyMethod2, ilgili tam nitelikli imzalarla eşleştirilir. |
Belirli türleri ve türetilmiş türlerini dışlama
excluded_type_names_with_derived_types seçeneğini ayarlayarak 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
Not
XXXX
CAXXXX bölümünü geçerli kuralın kimliğiyle değiştirin.
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).
- Tam nitelikli adlar, simgenin belge kimliği biçiminde ve isteğe bağlı bir
T:ön ek ile kullanılabilir.
Örnekler:
| Seçenek değeri | Özet |
|---|---|
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType |
MyType adlı tüm türleri ve onlardan türeyen türlerin tümünü eşleştirir. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 |
MyType1 veya MyType2 adlı tüm türleri ve bunlardan türetilmiş tüm türleri eşleştirir. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
Belirli bir MyType türünü, verilen tam adla ve ona türetilmiş tüm türlerle 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 karşılık gelen tam adları ve bunların tüm türetilmiş türleriyle eşleştirir. |
Örnek
Aşağıdaki kodda example1 , dize CA1305 kuralını ihlal eder. Dize, example2 CA1305 kuralını yerine getirmek için, CultureInfo.CurrentCulture, IFormatProvider'i uygulayarak String.Format(IFormatProvider, String, Object)'e iletir. Dize, CA1305 kuralını, example3 ile String.Create(IFormatProvider, DefaultInterpolatedStringHandler) yanında ilişkilendirilmiş bir dizeyi CultureInfo.InvariantCulture geçirerek 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}");