Null-kontrollen kan förenklas (IDE0029, IDE0030 och IDE0270)
I den här artikeln beskrivs tre relaterade regler, IDE0029
, IDE0030
och IDE0270
.
Egenskap | Värde |
---|---|
Regel-ID | IDE0029 |
rubrik | Nullkontroll kan förenklas (ternär villkorskontroll) |
kategori | Stil |
underkategori | Språkregler (inställningar på uttrycksnivå) |
Tillämpliga språk | C# och Visual Basic |
alternativ | dotnet_style_coalesce_expression |
Egenskap | Värde |
---|---|
regel-ID | IDE0030 |
rubrik | Null-kontrollen kan förenklas (villkorlig kontroll som kan ogiltigförklaras) |
Kategori | Stil |
underkategori | Språkregler (inställningar på uttrycksnivå) |
Tillämpliga språk | C# och Visual Basic |
alternativ | dotnet_style_coalesce_expression |
Egenskap | Värde |
---|---|
regel-ID | IDE0270 |
rubrik | Null-kontroll kan förenklas (om null-kontroll) |
Kategori | Stil |
underkategori | Språkregler (inställningar på uttrycksnivå) |
Tillämpliga språk | C# och Visual Basic |
alternativ | dotnet_style_coalesce_expression |
Överblick
Regler IDE0029 och IDE0030 gäller användningen av null-sammanslagning uttryck, till exempel x ?? y
, jämfört med ternära villkorsuttryck med null
kontroller, till exempel x != null ? x : y
. Reglerna skiljer sig åt när det gäller nullbarheten för uttrycken:
-
IDE0029
: Används när icke-nullbara uttryck ingår. Den här regeln kan till exempel rekommenderax ?? y
i stället förx != null ? x : y
närx
ochy
inte är nullbara referenstyper. -
IDE0030
: Används när nullbara uttryck ingår. Den här regeln kan till exempel rekommenderax ?? y
i stället förx != null ? x : y
närx
ochy
är nullbara värdetyper eller nullbara referenstyper.
Regeln IDE0270 flaggar användningen av en nullkontroll (== null
eller is null
) i stället för null-coalescingoperatorn (??
).
Alternativ
Alternativ anger det beteende som du vill att regeln ska framtvinga. Information om hur du konfigurerar alternativ finns i Alternativformat.
dotnet_style_coalesce_expression
Egenskap | Värde | Beskrivning |
---|---|---|
Alternativnamn | dotnet_style_coalesce_expression | |
Alternativvärden | true |
Föredra null-sammankopplingsuttryck. |
false |
Inaktiverar regeln. | |
standardalternativvärde | true |
Exempel
IDE0029 och IDE0030
// Code with violation.
var v = x != null ? x : y; // or
var v = x == null ? y : x;
// Fixed code.
var v = x ?? y;
' Code with violation.
Dim v = If(x Is Nothing, y, x) ' or
Dim v = If(x IsNot Nothing, x, y)
' Fixed code.
Dim v = If(x, y)
IDE0270
// Code with violation.
class C
{
void M()
{
var item = FindItem() as C;
if (item == null)
throw new System.InvalidOperationException();
}
object? FindItem() => null;
}
// Fixed code (dotnet_style_coalesce_expression = true).
class C
{
void M()
{
var item = FindItem() as C ?? throw new System.InvalidOperationException();
}
object? FindItem() => null;
}
' Code with violation.
Public Class C
Sub M()
Dim item = TryCast(FindItem(), C)
If item Is Nothing Then
item = New C()
End If
End Sub
Function FindItem() As Object
Return Nothing
End Function
End Class
' Fixed code (dotnet_style_coalesce_expression = true).
Public Class C
Sub M()
Dim item = If(TryCast(FindItem(), C), New C())
End Sub
Function FindItem() As Object
Return Nothing
End Function
End Class
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och återaktiverar sedan regeln.
#pragma warning disable IDE0029 // Or IDE0030 or IDE0270
// The code that's violating the rule is on this line.
#pragma warning restore IDE0029 // Or IDE0030 or IDE0270
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.IDE0029.severity = none
dotnet_diagnostic.IDE0030.severity = none
dotnet_diagnostic.IDE0270.severity = none
Om du vill inaktivera alla regler i kodformat anger du allvarlighetsgraden för kategorin Style
till none
i konfigurationsfilen .
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Style.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.