Equality comparison between multiple variables
I've a situation where I need to check whether multiple variables are having same data such as
var x=1;
var y=1;
var z=1;
I want to check whether x==1 and y==1 z==1 (it may be '1' or some other value). instead of this, is there any short way I can achieve same such as below
if(x==y==z==1)
Is this possible in C#?
Solution 1:
KennyTM is correct, there is no other simpler or more efficient way.
However, if you have many variables, you could also build an array of the values and use the IEnumerable.All method to verify they're all 1. More readable, IMO.
if (new[] { v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 }.All(x => x == 1))
Instead of
if(v1 == 1 && v2 == 1 && v3 == 1 && v4 == 1 && v5 == 1 && v6 == 1 && v7 == 1 && v8 == 1 && v9== 1 && v10 == 1)
Solution 2:
if (x == y && y == z && z == 1)
is the best you can do, because
y == z
evaluates to a boolean and you can't compare x
with the result:
x == (y == z)
| |
int bool
I would do this:
public bool AllEqual<T>(params T[] values) {
if(values == null || values.Length == 0)
return true;
return values.All(v => v.Equals(values[0]));
}
// ...
if(AllEqual(x, y, z)) { ... }
Solution 3:
If you just want to testif x == y == z you can use:
var allEqual = new[] {x, y, z}.Distinct().Count() == 1;
If you want to test if they're all equal to 1, add 1 to the set:
var allEqual1 = new[] {x, y, z, 1}.Distinct().Count() == 1;
or use All
as in fencliff's answer.
Solution 4:
if (x == y && y == z && z == 1)
There are no other simple or more efficient ways.