CA2246: Ne rendeljen hozzá szimbólumot és tagját ugyanabban az utasításban
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2246 |
Cím | Ne rendeljen hozzá szimbólumot és tagját ugyanabban az utasításban |
Kategória | Használat |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Javaslatként |
Ok
Egy szimbólumot és annak tagját ugyanabban az utasításban rendelték hozzá. Például:
// 'a' and 'a.Field' are assigned in the same statement
a.Field = a = b;
Szabály leírása
Nem ajánlott egy szimbólumot és annak tagját, azaz egy mezőt vagy tulajdonságot hozzárendelni ugyanabban az utasításban. Nem egyértelmű, hogy a taghozzáférés a szimbólum régi értékét akarta-e használni a hozzárendelés előtt, vagy a hozzárendelés új értékét ebben az utasításban. Az egyértelműség kedvéért a több hozzárendelési utasítást két vagy több egyszerű hozzárendelési utasításra kell felosztani.
Szabálysértések kijavítása
A szabálysértések kijavításához ossza fel a több hozzárendelési utasítást két vagy több egyszerű hozzárendelési utasításra. Az alábbi kódrészlet például a szabály megsértését és a felhasználói szándék alapján történő kijavításának néhány módját mutatja be:
public class C
{
public C Field;
}
public class Test
{
public void M(C a, C b)
{
// Let us assume 'a' points to 'Instance1' and 'b' points to 'Instance2' at the start of the method.
// It is not clear if the user intent in the below statement is to assign to 'Instance1.Field' or 'Instance2.Field'.
// CA2246: Symbol 'a' and its member 'Field' are both assigned in the same statement. You are at risk of assigning the member of an unintended object.
a.Field = a = b;
}
}
public class C
{
public C Field;
}
public class Test
{
public void M(C a, C b)
{
// Let us assume 'a' points to 'Instance1' and 'b' points to 'Instance2' at the start of the method.
// 'Instance1.Field' is intended to be assigned.
var instance1 = a;
a = b;
instance1.Field = a;
}
}
public class C
{
public C Field;
}
public class Test
{
public void M(C a, C b)
{
// Let us assume 'a' points to 'Instance1' and 'b' points to 'Instance2' at the start of the method.
// 'Instance2.Field' is intended to be assigned.
a = b;
b.Field = a; // or 'a.Field = a;'
}
}
Mikor kell letiltani a figyelmeztetéseket?
Ne tiltsa el a szabály megsértését.
Kapcsolódó szabályok
Kapcsolódó információk
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: