Share via


Null-kontrollen kan förenklas (IDE0029, IDE0030 och IDE0270)

I den här artikeln beskrivs tre relaterade regler, IDE0029, IDE0030och IDE0270.

Egenskap Värde
Regel-ID IDE0029
Rubrik Null-kontrollen kan förenklas (villkorsstyrd kontroll för ternary)
Kategori Format
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 (villkorsstyrd kontroll som kan ha värdet null)
Kategori Format
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 Format
Underkategori Språkregler (inställningar på uttrycksnivå)
Tillämpliga språk C# och Visual Basic
Alternativ dotnet_style_coalesce_expression

Översikt

Reglerna IDE0029 och IDE0030 gäller användning av null-sammanskringsuttryck, x ?? ytill exempel , jämfört med ternary-villkorsuttryck med null kontroller, x != null ? x : ytill exempel . Reglerna skiljer sig åt när det gäller nullbarheten för uttrycken:

  • IDE0029: Används när uttryck som inte kan ha värdet null är inblandade. Den här regeln kan till exempel rekommendera x ?? y i stället för x != null ? x : y när x och y inte är nullbara referenstyper.
  • IDE0030: Används när nullbara uttryck är inblandade. Den här regeln kan till exempel rekommendera x ?? y i stället för x != null ? x : y när x och y är nullbara värdetyper eller referenstyper som kan ha värdet null.

Regel IDE0270 flaggar användningen av en null-kontroll (== null eller is null) i stället för operatorn null-coalescing (??).

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öredrar 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 preprocessor-direktiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#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 kodstil 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.

Se även