Delen via


CA2245: Wijs geen eigenschap toe aan zichzelf

Eigenschappen Weergegeven als
Regel-id CA2245
Titel Wijs geen eigenschap toe aan zichzelf
Categorie Gebruik
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 8 Als suggestie

Oorzaak

Er is per ongeluk 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 schending voor zelftoewijzing van eigenschappen om deze functionele bugs op te lossen. Voor de kleine set hoekcases waarbij zelftoewijzing van eigenschappen wenselijk is, CA2245 kunnen schendingen in de bron worden onderdrukt met een passende redencommentaar.

Schendingen oplossen

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 zoals 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 Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Zie ook