You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:38:27