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.