Operador is (Referencia de C#)

El operador is comprueba si el resultado de una expresión es compatible con un tipo determinado. Para obtener información sobre el operador de prueba de tipos is, vea la sección operador is del artículo Operadores de conversión y prueba de tipos. También puede usar el operador is para comparar una expresión con un patrón, tal como se muestra en el ejemplo siguiente:

static bool IsFirstFridayOfOctober(DateTime date) =>
    date is { Month: 10, Day: <=7, DayOfWeek: DayOfWeek.Friday };

En el ejemplo anterior, el operador is compara una expresión con un patrón de propiedad con patrones constantes y relacionales anidados.

El operador is puede resultar útil en los siguientes escenarios:

  • Para comprobar el tipo en tiempo de ejecución de una expresión, como se muestra en el ejemplo siguiente:

    int i = 34;
    object iBoxed = i;
    int? jNullable = 42;
    if (iBoxed is int a && jNullable is int b)
    {
        Console.WriteLine(a + b);  // output 76
    }
    

    En el ejemplo anterior se muestra el uso de un patrón de declaración.

  • Para comprobar null, como se muestra en el ejemplo siguiente:

    if (input is null)
    {
        return;
    }
    

    Al comparar una expresión con null, el compilador garantiza que no se invoca ningún operador == o != sobrecargado por el usuario.

  • Puede usar un patrón de negación para realizar una comprobación que no sea NULL, como se muestra en el ejemplo siguiente:

    if (result is not null)
    {
        Console.WriteLine(result.ToString());
    }
    
  • A partir de C# 11, puede usar patrones de lista para buscar coincidencias con elementos de una lista o matriz. El código siguiente comprueba las matrices de valores enteros en las posiciones esperadas:

    int[] empty = [];
    int[] one = [1];
    int[] odd = [1, 3, 5];
    int[] even = [2, 4, 6];
    int[] fib = [1, 1, 2, 3, 5];
    
    Console.WriteLine(odd is [1, _, 2, ..]);   // false
    Console.WriteLine(fib is [1, _, 2, ..]);   // true
    Console.WriteLine(fib is [_, 1, 2, 3, ..]);     // true
    Console.WriteLine(fib is [.., 1, 2, 3, _ ]);     // true
    Console.WriteLine(even is [2, _, 6]);     // true
    Console.WriteLine(even is [2, .., 6]);    // true
    Console.WriteLine(odd is [.., 3, 5]); // true
    Console.WriteLine(even is [.., 3, 5]); // false
    Console.WriteLine(fib is [.., 3, 5]); // true
    

Nota

Para obtener la lista completa de patrones admitidos por el operador is, vea Patrones.

Especificación del lenguaje C#

Para más información, consulte la sección El operador de la especificación del lenguaje C#y de coincidencia de patrones.

Consulte también