CA2245: Wijs geen eigenschap toe aan zichzelf

Eigenschap Waarde
Regel-id CA2245
Titel Wijs geen eigenschap toe aan zichzelf
Categorie Gebruik
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Als suggestie
Toepasselijke talen C# en Visual Basic

Oorzaak

Per ongeluk is een eigenschap aan zichzelf toegewezen.

Beschrijving van regel

C#-compiler genereert een waarschuwing CS1717: Toewijzing gemaakt aan dezelfde variabele; wilde u iets anders toewijzen? wanneer een veld, lokaal of parametersymbool aan zichzelf wordt toegewezen. Een dergelijke fout komt vaak voor wanneer een lokaal, parameter- of veldsymbool een naam heeft die vergelijkbaar is met een ander symbool in het bereik. In plaats van verschillende symbolen aan de linkerkant en aan de rechterkant van de opdracht te gebruiken, werd hetzelfde symbool aan beide zijden gebruikt. Dit leidt tot een redundante toewijzing van de waarde aan zichzelf en geeft in het algemeen een functionele fout aan.

Het toewijzen van een eigenschap aan zichzelf is ook een vergelijkbare functionele bug voor bijna alle echte gevallen. In sommige extreme gevallen kan het ophalen van een eigenschapswaarde echter neveneffecten hebben en de nieuwe waarde van de eigenschap verschilt van de oorspronkelijke waarde. Zo ja, dan is zelftoewijzing van eigenschappen niet redundant en kan deze niet worden verwijderd. Hiermee voorkomt u dat de compiler een CS1717 waarschuwing genereert voor de zelftoewijzing van eigenschappen, zonder dat er een belangrijke wijziging wordt aangebracht voor deze gevallen.

Regel CA2245 is erop gericht deze kloof te vullen. Het rapporteert de overtreding van zelftoewijzing van eigenschappen om deze functionele bugs te helpen oplossen. Voor de kleine set bijzondere gevallen waarin zelftoewijzing van eigenschappen wenselijk is, kunnen CA2245-schendingen in de bron worden onderdrukt met een passende toelichting in het commentaar.

Hoe schendingen op te lossen

Als u schendingen wilt oplossen, gebruikt u verschillende symbolen aan de linkerkant en aan de rechterkant van de opdracht. In het volgende codefragment ziet u bijvoorbeeld een schending van de regel en hoe u dit kunt oplossen:

public class C
{
    private int p = 0;
    public int P { get; private set; }

    public void M(int p)
    {
        // CS1717: Accidentally assigned the parameter 'p' to itself.
        p = p;

        // CA2245: Accidentally assigned the property 'P' to itself.
        P = P;
    }
}
public class C
{
    private int p = 0;
    public int P { get; private set; }

    public void M(int p)
    {
        // No violation, now the parameter is assigned to the field.
        this.p = p;

        // No violation, now the parameter is assigned to the property.
        P = p;
    }
}

Wanneer waarschuwingen onderdrukken

Het is veilig om schendingen van deze regel te onderdrukken als het ophalen van een eigenschapswaarde bijwerkingen kan hebben en de nieuwe waarde van de eigenschap verschilt van de oorspronkelijke waarde. Zo ja, dan is zelftoewijzing van eigenschappen niet redundant. Er moet een redencommentaar worden toegevoegd aan de onderdrukking om dit als verwacht gedrag te documenteren.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

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

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

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

Zie voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.

Zie ook