假设我有 4 个变量
bool value1 = false;
bool value2 = false;
bool value3 = true;
bool value4 = false;
Run Code Online (Sandbox Code Playgroud)
并且它们都没有相同的值(都是真的,||都是假的)
我找到了 2 种方法,无论如何它们看起来都不容易理解。
bool areDifferent = !(value1 == value2 == value3 == value4);
Run Code Online (Sandbox Code Playgroud)
和
bool areDifferent = new[] { value1, value2, value3, value4 }.Distinct().Count() > 1;
Run Code Online (Sandbox Code Playgroud)
问题:是否有其他方法,在可读性/可理解性方面更好?
Ser*_*kiy 10
为了可读性和理解性,我会交换逻辑。当您检查值是否不同时,不清楚 - 所有值都应该不同(考虑整数值 1、2、3),或者值可能相等,但至少有一个不同的值(1、2、1)?当您检查所有值是否相等时,它总是很清楚。
我会将此逻辑提取到命名良好的方法中(如果需要,您甚至可以将其设为通用):
public static bool AllEqual(params bool[] values)
{
if (values.Length == 0)
return true;
var first = values[0];
for (int i = 1; i < values.Length; i++)
if (values[i] != first)
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
和用法
var notAllEqual = !AllEqual(value1, value2, value3, value4);
Run Code Online (Sandbox Code Playgroud)
使用声明式方法,您的代码描述了您在做什么,而不是告诉读者如何做,让读者自己了解什么。
更新:如果你总是处理四个布尔值,检查它们是否不完全相等的最简单方法是
(value1 ^ value2) || (value2 ^ value3) || (value3 ^ value4)
Run Code Online (Sandbox Code Playgroud)
但就可读性而言,任何命令式方法都比声明式方法差