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
相关产品推荐
相关产品推荐

