Evento
Construír aplicacións intelixentes
Mar 17, 9 PM - Mar 21, 10 AM
Únete á serie de encontros para construír solucións de IA escalables baseadas en casos de uso do mundo real con compañeiros desenvolvedores e expertos.
Rexistrar agoraEste explorador xa non é compatible.
Actualice a Microsoft Edge para dispoñer das funcionalidades máis recentes, as actualizacións de seguranza e a asistencia técnica.
switch
palabra claveSe usa la expresión switch
para evaluar una expresión única a partir de una lista de expresiones candidatas basadas en una coincidencia de patrón con una expresión de entrada. Para obtener información sobre la instrucción switch
que admite la semántica switch
en un contexto de instrucción, consulte la sección instrucción switch
del artículo Instrucciones de selección.
En el ejemplo siguiente se muestra una expresión switch
, que traslada los valores de un objeto enum
que representa las direcciones visuales de un mapa en línea hasta la dirección cardinal correspondiente:
public static class SwitchExample
{
public enum Direction
{
Up,
Down,
Right,
Left
}
public enum Orientation
{
North,
South,
East,
West
}
public static Orientation ToOrientation(Direction direction) => direction switch
{
Direction.Up => Orientation.North,
Direction.Right => Orientation.East,
Direction.Down => Orientation.South,
Direction.Left => Orientation.West,
_ => throw new ArgumentOutOfRangeException(nameof(direction), $"Not expected direction value: {direction}"),
};
public static void Main()
{
var direction = Direction.Right;
Console.WriteLine($"Map view direction is {direction}");
Console.WriteLine($"Cardinal orientation is {ToOrientation(direction)}");
// Output:
// Map view direction is Right
// Cardinal orientation is East
}
}
En el ejemplo anterior se muestran los elementos básicos de una expresión switch
:
switch
. En el ejemplo anterior, es el parámetro del método direction
.switch
, separados por comas. Cada brazo de la expresión switch
contiene un patrón, una restricción de mayúsculas y minúsculas opcional, el token =>
y una expresión.En el ejemplo anterior, una expresión switch
usa los siguientes patrones:
Direction
.Direction
(como, (Direction)10
). Esto hace que la expresión switch
sea exhaustiva.Importante
Para obtener información sobre los patrones admitidos por una expresión switch
y más ejemplos, consulte Patrones.
El resultado de la expresión switch
es el valor de la expresión del primer brazo de la expresión switch
cuyo patrón coincide con la expresión de intervalo y cuya restricción de mayúsculas y minúsculas, en caso de estar presente, se evalúa como true
. Los brazos de la expresión switch
se evalúan en orden de texto.
El compilador emite un error cuando no se puede elegir un brazo de la expresión switch
inferior porque un brazo de la expresión switch
superior coincide con todos sus valores.
Un patrón puede no ser lo suficientemente expresivo como para especificar la condición para la evaluación de la expresión de un brazo. En tal caso, puede usar una restricción de caso. Una restricción de caso es una condición adicional que debe cumplirse junto con un patrón coincidente. Una restricción de caso debe ser una expresión booleana. Especifique una restricción de mayúsculas y minúsculas después de la palabra clave when
que sigue un patrón, como se muestra en el ejemplo siguiente:
public readonly struct Point
{
public Point(int x, int y) => (X, Y) = (x, y);
public int X { get; }
public int Y { get; }
}
static Point Transform(Point point) => point switch
{
{ X: 0, Y: 0 } => new Point(0, 0),
{ X: var x, Y: var y } when x < y => new Point(x + y, y),
{ X: var x, Y: var y } when x > y => new Point(x - y, y),
{ X: var x, Y: var y } => new Point(2 * x, 2 * y),
};
En el ejemplo anterior se usan patrones de propiedad con patrones var anidados.
Si ninguno de los patrones de una expresión switch
coincide con un valor de entrada, el entorno de ejecución produce una excepción. En .NET Core 3.0 y versiones posteriores, la excepción es System.Runtime.CompilerServices.SwitchExpressionException. En .NET Framework, la excepción es InvalidOperationException. En la mayoría de los casos, el compilador genera una advertencia si una expresión switch
no controla todos los valores de entrada posibles. Los patrones de lista no generan una advertencia cuando no se controlan todas las entradas posibles.
Suxestión
Para garantizar que una expresión switch
controle todos los valores de entrada posibles, proporcione un brazo de expresión switch
con un patrón de descarte.
Para obtener más información, vea la sección sobre la expresión de switch
de la nota de propuesta de características.
Comentarios de .NET
.NET é un proxecto de código aberto. Selecciona unha ligazón para ofrecer comentarios:
Evento
Construír aplicacións intelixentes
Mar 17, 9 PM - Mar 21, 10 AM
Únete á serie de encontros para construír solucións de IA escalables baseadas en casos de uso do mundo real con compañeiros desenvolvedores e expertos.
Rexistrar agora