Comparación de igualdad entre múltiples variables

Tengo una situación en la que necesito verificar si múltiples variables tienen los mismos datos, como

var x=1; var y=1; var z=1; 

Quiero verificar si x == 1 e y == 1 z == 1 (puede ser ‘1’ o algún otro valor). en lugar de esto, ¿hay alguna manera de lograrlo?

 if(x==y==z==1) 

¿Es esto posible en C #?

KennyTM es correcto, no hay otra manera más simple o más eficiente.

Sin embargo, si tiene muchas variables, también puede crear una matriz de valores y usar el método IEnumerable.All para verificar que sean todos 1. Más legible, IMO.

 if (new[] { v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 }.All(x => x == 1)) 

En lugar de

 if(v1 == 1 && v2 == 1 && v3 == 1 && v4 == 1 && v5 == 1 && v6 == 1 && v7 == 1 && v8 == 1 && v9== 1 && v10 == 1) 
 if (x == y && y == z && z == 1) 

es lo mejor que puedes hacer, porque

y == z evalúa a booleano y no puede comparar x con el resultado:

 x == (y == z) | | int bool 

Yo haría esto:

 public bool AllEqual(params T[] values) { if(values == null || values.Length == 0) return true; return values.All(v => v.Equals(values[0])); } // ... if(AllEqual(x, y, z)) { ... } 

Si solo quieres testif x == y == z puedes usar:

 var allEqual = new[] {x, y, z}.Distinct().Count() == 1; 

Si quiere probar si todos son iguales a 1, agregue 1 al conjunto:

 var allEqual1 = new[] {x, y, z, 1}.Distinct().Count() == 1; 

o use All como en la respuesta de Fencliff.

 if (x == y && y == z && z == 1) 

No hay otras formas simples o más eficientes.

Para tipos integrales, ¿qué pasa con:

 int x = 3, y = 3, z = 3; if((x & y & z & 3) == 3) //...have same data 

para probar cualquier valor distinto de cero . Necesitaría más controles para hacer de esto una función reutilizable. Pero podría funcionar para verificaciones en línea de igualdad distinta de cero, como describió el OP.

Aquí hay una pequeña y agradable solución recursiva que funciona con todos los tipos.

 class Program { static void Main(string[] args) { int x = 4, y = 4, z = 4; Console.WriteLine(4.IsEqualToAllIn(x, y, z).ToString()); //prints True string a = "str", b = "str1", c = "str"; Console.WriteLine("str".IsEqualToAllIn(a, b, c).ToString()); //prints False } } public static class MyExtensions { public static bool IsEqualToAllIn(this T valueToCompare, params T[] list) { bool prevResult = true; if (list.Count() > 1) prevResult = list[0].IsEqualToAllIn(list.Skip(1).ToArray()); return (valueToCompare.Equals(list[0])) && prevResult; } } 
 public static bool AllSame(List values) { return values.Distinct().Count() == 1; } public static bool AllDifferent(List values) { return values.Distinct().Count() == values.Count; } 

XOR podría funcionar para usted, por ejemplo, dado:

 var x=1; var y=1; var z=1; 

Entonces

 x ^ y ^ z == 0 

Es verdad

-edit- Si desea verificar si todos los valores son iguales y su valor es 1, use:

 x ^ y ^ z ^ 1 == 0 

Agrega esta extensión:

 public static class Extensions { public static bool EqualsAll(this T subject, params T[] values) => values == null || values.Length == 0 || values.All(v => v.Equals(subject)); } 

Entonces llámalo así:

 if(1.EqualsAll(x, y, z)) 

En realidad no tengo tiempo para codificar, pero un método de extensión con linq como este

 public bool EqualsToAll(this T element, IEnumerable source) { if(element == null) throw new ArgumentNullException(element); foreach(var item in source) { if(!element.Equals(item) return false; } return true; } 

debería hacerlo.

Advertencia: este código no fue probado ni escrito dentro de un IDE.

 var x = 1; var y = 1; var z = 1; if (AllEqual(1, x, y, z)) // true if (AllEqual(2, x, y, z)) // false if (AllEqual(x, y, z)) // true var a = 1; var b = 2; var c = 3; if (AllEqual(a, b, c)) // false // ... public static bool AllEqual(params T[] values) { if (values == null) throw new ArgumentNullException("values"); if (values.Length < 1) throw new ArgumentException("Values cannot be empty.", "values"); T value = values[0]; for (int i = 1; i < values.Length; i++) { if (!value.Equals(values[i])) return false; } return true; } 

Adapte la solución de Mau en un método de extensión. Sería bueno si agregaron esto al marco para todos los tipos de valores.

 public static class IntegerExtensions { public static bool EqualsAll(this int subject, params int[] values) { if (values == null || values.Length == 0) { return true; } return values.All(v => v == subject); } } 

Así es como hice esto:

 Debug.Assert(new List { l1.Count, l2.Count, l3.Count, l4.Count }.TrueForAll( delegate(int value) { return value == l1.Count; }), "Tables have different size."); 

Ligera variación en la excelente respuesta dada por jevakallio arriba. Vea si myValue es igual a cualquiera de los valores en una lista (en la matriz):

 if (new[] { 10, 11, 12 }.Any(x => x == myValue))