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

如何在C#中编写判断负温度值是否处于-44至-46区间的条件?

咱们来一步步拆解你的问题哈,你遇到的核心问题是逻辑判断的方向搞反了,再加上对Enumerable.Range的用法理解有误,我来帮你修正:

先解决第二个代码的关键错误

你写的条件:

if (!(cameraTemp >= -44 && cameraTemp <= -46))

这里的逻辑完全矛盾——一个数不可能同时大于等于-44(比-44大或相等)又小于等于-46(比-46小或相等),毕竟-44是比-46大的!所以cameraTemp >= -44 && cameraTemp <= -46这个表达式永远是false,取反后就永远为true,不管你的温度是多少,条件都会成立。

正确的区间判断逻辑应该是:温度大于等于更小的边界(-46),并且小于等于更大的边界(-44),也就是:

// 判断温度是否处于[-46, -44]区间内(包含两端)
if (cameraTemp >= -46 && cameraTemp <= -44)
{
    // 温度在目标区间内的执行逻辑
}

// 如果是想判断温度不在这个区间内,就加取反
if (!(cameraTemp >= -46 && cameraTemp <= -44))
{
    // 温度不在目标区间内的执行逻辑
}

再纠正Enumerable.Range的用法问题

Enumerable.Range(start, count)的第二个参数是要生成的元素数量,不是结束值。你写的Enumerable.Range(-44, 1)只会生成-44这一个数,Enumerable.Range(-45,1)只生成-45,以此类推。另外你的逻辑用了!Contains || !Contains,这也不符合需求——逻辑或的情况下,只要有一个条件为true整个表达式就为true,比如温度是-45时,!Enumerable.Range(-44,1).Contains(-45)是true,所以整个条件会成立。

如果非要用Enumerable.Range来判断,正确的写法是生成包含-46、-45、-44的集合,再判断是否包含目标值:

// 从-46开始,生成3个递增的数:-46, -45, -44
var targetTemps = Enumerable.Range(-46, 3);
if (targetTemps.Contains(cameraTemp))
{
    // 温度在目标区间内的执行逻辑
}

不过这种写法对于连续整数区间来说,远不如直接用数值比较高效,更推荐第一种数值判断的方式。

总结

最简洁高效的写法就是直接进行数值范围判断,记住区间判断的规则:左边放更小的边界,右边放更大的边界,负数的大小关系可别搞反啦!

内容的提问来源于stack exchange,提问作者Baba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:15:38