c# - sintaxis - switch default
Combinando mĂșltiples expresiones condicionales en C# (9)
¿Necesitas algo así?
int x = 5;
if((new int[]{5,6}).Contains(x))
{
Console.WriteLine("true");
}
Console.ReadLine();
En C #, en lugar de hacer if(index == 7 || index == 8)
, ¿hay alguna forma de combinarlos? Estoy pensando en algo como if(index == (7, 8))
.
Escribe tus propios métodos de extensión para que puedas escribir
if (index.Between(7, 8)) {...}
donde Entre se define como:
public static bool Between (this int a, int x, int y)
{
return a >= x && a <= y;
}
No hay forma de hacerlo, pero ciertamente podría hacer un rango usando if( index >=7 && index <= 8 )
. Pero darle una lista de números requerirá que cree una matriz o un objeto de lista y luego use un método para hacer esto. Pero eso es simplemente una exageración.
No hay forma, en el conjunto actual de sintaxis de C #, de combinar múltiples operandos del lado derecho para pasarlos a un solo operador binario según mi conocimiento.
Podría poner los valores que necesita comparar en una matriz en línea y usar un método de extensión Contains. Vea este artículo para empezar.
Varios fragmentos que demuestran el concepto:
int index = 1;
Console.WriteLine("Example 1: ", new int[] { 1, 2, 4 }.Contains(index));
index = 2;
Console.WriteLine("Example 2: ", new int[] { 0, 5, 3, 4, 236 }.Contains(index));
Salida:
Example 1: True
Example 2: False
Podrías usar esto:
if (new List<int>() { 7, 8 }.Contains(index))
Puedes lograr esto con un método de extensión.
public static bool In<T>(this T obj, params T[] collection) {
return collection.Contains(obj);
}
Entonces...
if(index.In(7,8))
{
...
}
if ((new int[]{7,8}).Contains(index))
switch (GetExpensiveValue())
{
case 7: case 8:
// do work
break;
}
Obviamente, esto requiere más código, pero puede evitar que evalúe una función varias veces.