CA1304: CultureInfo'nun Belirtilmesi

Özellik Değer
Kural Kimliği CA1304
Başlık CultureInfo 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 yöntemin veya oluşturucunun, bir System.Globalization.CultureInfo parametresini kabul eden aşırı yüklemeye sahip bir üye çağrısı yaptığında, yöntemin veya oluşturucunun CultureInfo parametresini alan aşırı yüklemeyi çağırmadığı durum. Bu kural aşağıdaki yöntemlere yapılan çağrıları yoksayar:

Ayrıca , bu kural tarafından dışlanacak daha fazla simge yapılandırabilirsiniz .

Kural açıklaması

Bir CultureInfo veya System.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, yani bir dosyada veya veritabanında kalıcı hale gelecekse 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.

Not

CultureInfo.CurrentUICulture yalnızca sınıfının bir örneğini System.Resources.ResourceManager kullanarak yerelleştirilmiş kaynakları almak için kullanılır.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için bir CultureInfo argümanı kabul eden aşırı yüklenmiş metodu kullanın.

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

Varsayılan kültürün doğru seçim olduğundan ve kod bakımının önemli bir geliştirme önceliği olmadığı durumlarda 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 CA1304
// The code that's violating the rule is on this line.
#pragma warning restore CA1304

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.CA1304.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çin T:, ve ad alanları için N: gibi bir simge türü ön eki gerektirir.
  • .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 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.

İhlallerin nasıl düzeltileceğini gösteren örnek

Aşağıdaki örnekte, BadMethod bu kuralın iki ihlaline neden olur. GoodMethod sabit kültürü'ne String.Comparegeçirerek ilk ihlali düzelter ve kullanıcıya görüntülendiğinden geçerli kültürü'ne String.ToLowerstring3 geçirerek ikinci ihlali düzelter.

public class CultureInfoTest
{
    public void BadMethod(String string1, String string2, String string3)
    {
        if (string.Compare(string1, string2, false) == 0)
        {
            Console.WriteLine(string3.ToLower());
        }
    }

    public void GoodMethod(String string1, String string2, String string3)
    {
        if (string.Compare(string1, string2, false,
                          CultureInfo.InvariantCulture) == 0)
        {
            Console.WriteLine(string3.ToLower(CultureInfo.CurrentCulture));
        }
    }
}

Biçimlendirilmiş çıkışı gösteren örnek

Aşağıdaki örnek, geçerli kültürün IFormatProvider türü tarafından seçilen varsayılan DateTime üzerindeki etkisini gösterir.

public class IFormatProviderTest
{
    public static void Main1304()
    {
        string dt = "6/4/1900 12:15:12";

        // The default behavior of DateTime.Parse is to use
        // the current culture.

        // Violates rule: SpecifyIFormatProvider.
        DateTime myDateTime = DateTime.Parse(dt);
        Console.WriteLine(myDateTime);

        // Change the current culture to the French culture,
        // and parsing the same string yields a different value.

        Thread.CurrentThread.CurrentCulture = new CultureInfo("Fr-fr", true);
        myDateTime = DateTime.Parse(dt);

        Console.WriteLine(myDateTime);
    }
}

Bu örnek aşağıdaki çıkışı oluşturur:

6/4/1900 12:15:12 PM
06/04/1900 12:15:12

Ayrıca bkz.