如何在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

