C#中是否存在可简化多变量相等判断的运算符?
C#中是否支持链式多变量相等判断?
首先直接给结论:C#没有原生支持a == b == c这种链式相等运算符,你尝试的写法之所以无效,是因为C#的运算符求值逻辑导致的:a == b会先返回一个bool值(true或false),接着编译器会尝试把这个bool和c做比较——除非c本身也是bool类型,否则直接报编译错误,这显然和你想要的“三个变量值都相等”的逻辑完全不符。
那怎么简化if (a == b && b == c)这类写法呢?给你几个实用的方案:
自定义扩展方法(最推荐):写一个泛型扩展方法,支持任意数量的变量比较,复用性极强:
public static bool AllEqual<T>(this T source, params T[] values) where T : IEquatable<T> { foreach (var value in values) { if (!source.Equals(value)) return false; } return true; }使用起来非常简洁:
// 判断a、b、c是否相等 if (a.AllEqual(b, c)) { // 你的业务逻辑 } // 还支持更多变量,比如同时判断a、b、c、d if (a.AllEqual(b, c, d)) { // 你的业务逻辑 }利用集合去重:把变量放进集合,判断去重后的元素数量是否为1,适合临时场景快速实现:
if (new[] { a, b, c }.Distinct().Count() == 1) { // 你的业务逻辑 }注意:如果变量可能为
null,这个方法依然有效,但如果是引用类型,要确保Equals和GetHashCode的实现符合你的预期。保持原生写法:其实
if (a == b && b == c)本身已经足够清晰,对于三个变量的场景,可读性反而比自定义方法更高,没必要过度简化。
内容的提问来源于stack exchange,提问作者Radderz
相关产品推荐
相关产品推荐

