Açık dönüşüm ekleme (IDE0221)

Mülkiyet Değer
Kural Kimliği IDE0221
Başlık Açık dönüştürme ekleme
Kategori Stil
alt kategorisi Dil kuralları (ifade düzeyi tercihleri)
Geçerli diller C#
Options dotnet_style_prefer_non_hidden_explicit_cast_in_source

Genel bakış

Bu kural, derleyicinin ek bir gizli açık atama eklediği kaynak kodunda açık atamaları işaretler. Hem görünür hem de gizli dönüştürmeler, farklı nedenlerle çalışma zamanında başarısız olabilir. Bu kural bu tür bir kodu işaretlediğinde, kodun amacını net hale getirmek için ara atamanın açıkça kaynağa eklenmesini önerir.

Örneğin, (Derived)x yazarsanız, ilk olarak bir temel türe ve sonra türetilen türe olmak üzere iki açık dönüştürme gerektiren bir tür olan x, kaynakta yalnızca bir dönüştürme görünür. Derleyici, kaynakta herhangi bir gösterge olmadan ara atamayı ekler. Bu kural, her iki tip dönüşümünün de açıkça yazılmasını önerir: (Derived)(Base)x.

Options

Seçenekler, kuralın zorlamasını istediğiniz davranışı belirtir. Seçenekleri yapılandırma hakkında bilgi için bkz. Seçenek biçimi.

dotnet_style_prefer_non_hidden_explicit_cast_in_source

Mülkiyet Değer Açıklama
Seçenek adı dotnet_style_prefer_non_hidden_explicit_cast_in_source
Seçenek değerleri true Tüm ara açık atamaların kaynak kodda görünür olmasını tercih edin.
false Tüm ara açık tip dönüşümlerinin kaynak kodda görünür olmasını tercih etmeyin.
Varsayılan seçenek değeri true

Example

class Base { }
class Derived : Base { }

class Castable
{
    public static explicit operator Base(Castable c) => new Base();
}

class C
{
    void M()
    {
        // Code with violation: the compiler inserts a hidden (Base) cast.
        var v = (Derived)new Castable();

        // Fixed code: both casts are explicit in source.
        var v2 = (Derived)(Base)new Castable();
    }
}

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 IDE0221
// The code that's violating the rule is on this line.
#pragma warning restore IDE0221

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, none önem derecesini olarak ayarlayın.

[*.cs]
dotnet_diagnostic.IDE0221.severity = none

Kod stili kuralların tümünü devre dışı bırakmak için, kategorinin Stylenone önem derecesini yapılandırma dosyasında olarak ayarlayın.

[*.cs]
dotnet_analyzer_diagnostic.category-Style.severity = none

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

Ayrıca bakınız