JPR*_*ddy 37 c# comparison equality operators
我需要检查多个变量是否具有相同的数据,例如
var x=1;
var y=1;
var z=1;
Run Code Online (Sandbox Code Playgroud)
我想检查x == 1和y == 1 z == 1(它可能是'1'或其他值).而不是这个,是否有任何简短的方法,我可以实现相同,如下
if(x==y==z==1)
Run Code Online (Sandbox Code Playgroud)
这可能在C#中吗?
jev*_*lio 59
KennyTM是正确的,没有其他更简单或更有效的方法.
但是,如果你有很多变量,你也可以构建一个值数组并使用IEnumerable.All方法来验证它们都是1.更可读,IMO.
if (new[] { v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 }.All(x => x == 1))
Run Code Online (Sandbox Code Playgroud)
代替
if(v1 == 1 && v2 == 1 && v3 == 1 && v4 == 1 && v5 == 1 && v6 == 1 && v7 == 1 && v8 == 1 && v9== 1 && v10 == 1)
Run Code Online (Sandbox Code Playgroud)
Mau*_*Mau 29
if (x == y && y == z && z == 1)
Run Code Online (Sandbox Code Playgroud)
是你能做的最好的,因为
y == z求值为布尔值,您无法x与结果进行比较:
x == (y == z)
| |
int bool
Run Code Online (Sandbox Code Playgroud)
我会这样做:
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)) { ... }
Run Code Online (Sandbox Code Playgroud)
Jam*_*Ide 25
如果您只想测试x == y == z,您可以使用:
var allEqual = new[] {x, y, z}.Distinct().Count() == 1;
Run Code Online (Sandbox Code Playgroud)
如果要测试它们是否都等于1,请在集合中添加1:
var allEqual1 = new[] {x, y, z, 1}.Distinct().Count() == 1;
Run Code Online (Sandbox Code Playgroud)
或者All像在fencliff的回答中一样使用.
ken*_*ytm 10
if (x == y && y == z && z == 1)
Run Code Online (Sandbox Code Playgroud)
没有其他简单或更有效的方法.
对于整数类型,该如何处理:
int x = 3, y = 3, z = 3;
if((x & y & z & 3) == 3)
//...have same data
Run Code Online (Sandbox Code Playgroud)
用于测试任何非零值。要使此功能可重用,还需要进行更多检查。但是,如OP所述,它可能适用于非零相等性的内联检查。