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

C#中条件语句单变量两次比较的更优语法实现

C#中处理单变量范围比较的简化方案

嘿,这个问题我之前也碰到过!C#里确实没有像Python或者数学表达式那样的链式比较语法,你试的0 < ReturnedCount < 50之所以报错,是因为编译器会先计算0 < ReturnedCount得到一个布尔值,然后试图把这个bool和50比较,类型不匹配自然就跑不起来。不过针对这种单变量的范围比较,我们有几种更优雅的处理方式:

1. 原生逻辑写法(最直接)

虽然看起来重复了变量名,但这是C#里最常规的写法,可读性其实不差,团队里的其他开发者一眼就能看懂:

if (ReturnedCount > 0 && ReturnedCount < 50)
{
    // 你的业务逻辑
}

2. 自定义扩展方法(复用性拉满)

如果这种范围比较在你的代码里频繁出现,不如封装一个类似SQL BETWEEN的扩展方法,一次编写到处复用:

public static class NumericExtensions
{
    // 针对整数的范围判断(默认不包含边界)
    public static bool IsBetween(this int value, int lower, int upper, bool includeBounds = false)
    {
        return includeBounds 
            ? value >= lower && value <= upper 
            : value > lower && value < upper;
    }

    // 可以重载支持其他数值类型,比如double、long
    public static bool IsBetween(this double value, double lower, double upper, bool includeBounds = false)
    {
        return includeBounds 
            ? value >= lower && value <= upper 
            : value > lower && value < upper;
    }
}

使用起来就非常简洁了:

// 不包含0和50的情况
if (ReturnedCount.IsBetween(0, 50))
{
    // 逻辑代码
}

// 需要包含边界时,传入第三个参数
if (ReturnedCount.IsBetween(0, 50, includeBounds: true))
{
    // 包含0和50的处理逻辑
}

3. C# 9.0+ 模式匹配(原生简化写法)

如果你用的是C#9及以上版本,强烈推荐用原生的模式匹配语法,写法简洁又不用额外封装:

// 不包含边界
if (ReturnedCount is > 0 and < 50)
{
    // 你的逻辑
}

// 包含边界的情况
if (ReturnedCount is >= 0 and <= 50)
{
    // 逻辑代码
}

这种写法完全是C#原生支持的,可读性拉满,不需要任何额外代码,是我个人最推荐的方案。

4. 临时封装布尔表达式(单次使用场景)

如果只是偶尔用一次,不想写扩展方法,也可以把判断逻辑提前赋值给一个布尔变量,让代码结构更清晰:

bool isInValidRange = ReturnedCount > 0 && ReturnedCount < 50;
if (isInValidRange)
{
    // 你的业务逻辑
}

总结一下:如果你的项目已经升级到C#9+,优先用模式匹配的is > x and < y语法;如果需要在多个地方复用范围判断,扩展方法是更好的选择;原生的逻辑写法虽然看起来重复,但也完全没问题,不需要强行简化。

内容的提问来源于stack exchange,提问作者W.Harr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:05:23