Compartir a través de


La comprobación de valores null se puede simplificar (IDE0029, IDE0030 e IDE0270)

En este artículo se describen tres reglas relacionadas, IDE0029, IDE0030 y IDE0270.

Propiedad Valor
Identificador de la regla IDE0029
Título La comprobación de valores null se puede simplificar (comprobación condicional ternaria)
Categoría Estilo
Subcategoría Reglas del lenguaje (preferencias de nivel de expresión)
Lenguajes aplicables C# y Visual Basic
Opciones dotnet_style_coalesce_expression
Propiedad Valor
Identificador de la regla IDE0030
Título La comprobación de valores null se puede simplificar (comprobación condicional ternaria que acepta valores null)
Categoría Estilo
Subcategoría Reglas del lenguaje (preferencias de nivel de expresión)
Lenguajes aplicables C# y Visual Basic
Opciones dotnet_style_coalesce_expression
Propiedad Valor
Identificador de la regla IDE0270
Título La comprobación de valores null se puede simplificar (si la comprobación es nula)
Categoría Estilo
Subcategoría Reglas del lenguaje (preferencias de nivel de expresión)
Lenguajes aplicables C# y Visual Basic
Opciones dotnet_style_coalesce_expression

Información general

Las reglas IDE0029 y IDE0030 se refieren al uso de expresiones de fusión null, por ejemplo, x ?? y, frente a expresiones condicionales ternarias con comprobaciones null, por ejemplo, x != null ? x : y. Las reglas difieren con respecto a la nulabilidad de las expresiones:

  • IDE0029: se usa cuando existen expresiones que no aceptan valores NULL. Por ejemplo,esta regla podría recomendar x ?? y en lugar de x != null ? x : y cuando x y y son tipos de referencia que no aceptan valores NULL.
  • IDE0030: se usa cuando existen expresiones que aceptan valores NULL. Por ejemplo, esta regla podría recomendar x ?? y en lugar de x != null ? x : y cuando x y y son tipos de valor que aceptan valores NULL o tipos de referencia que aceptan valores NULL.

La regla IDE0270 marca el uso de una comprobación de valores null (== null o is null) en lugar del operador de fusión de NULL (??).

Opciones

Las opciones especifican el comportamiento que se quiere que aplique la regla. Para más información sobre cómo configurar opciones, consulte Formato de opción.

dotnet_style_coalesce_expression

Propiedad Valor Descripción
Nombre de la opción dotnet_style_coalesce_expression
Valores de opción true Se prefieren expresiones de fusión de null.
false Deshabilita la regla.
Valor de opción predeterminado true

Ejemplos

IDE0029 e 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

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

#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

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

[*.{cs,vb}]
dotnet_diagnostic.IDE0029.severity = none
dotnet_diagnostic.IDE0030.severity = none
dotnet_diagnostic.IDE0270.severity = none

Para deshabilitar todas las reglas de estilo del código, establezca la gravedad de la categoría Style en none del archivo de configuración.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Style.severity = none

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Consulte también