首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何优雅地检查一个数字是否在一个范围内?

如何优雅地检查一个数字是否在一个范围内?
EN

Stack Overflow用户
提问于 2010-07-07 01:30:23
回答 24查看 483.3K关注 0票数 213

我怎样才能用C#优雅地做到这一点?

例如,数字可以介于1和100之间。

我知道一个简单的if (x >= 1 && x <= 100)就足够了;但是随着大量的语法糖和新特性不断地添加到C#/.Net中,这个问题是关于更地道的(优雅的)方式来编写它。

性能不是问题,但请将性能注释添加到不是O(1)的解决方案中,因为人们可能会复制粘贴建议。

EN

回答 24

Stack Overflow用户

发布于 2010-07-07 01:32:26

你的意思是?

代码语言:javascript
运行
复制
if(number >= 1 && number <= 100)

代码语言:javascript
运行
复制
bool TestRange (int numberToCheck, int bottom, int top)
{
  return (numberToCheck >= bottom && numberToCheck <= top);
}
票数 111
EN

Stack Overflow用户

发布于 2013-09-21 01:03:30

在生产代码中,我会简单地写成

代码语言:javascript
运行
复制
1 <= x && x <= 100

这很容易理解,而且可读性很好。

从C#9.0开始,我们可以编写

代码语言:javascript
运行
复制
x is >= 1 and <= 100
// Note that we must write x only once. "is" introduces a pattern matching
// expression where "and" is part of the pattern.
// "&&" would require us to repeat "x is": x is >= 1 && x is <= 100

这里有一个聪明的方法,通过使用一些数学将比较的次数从两次减少到一次。其思想是,如果数字超出范围,则两个因子中的一个变为负数,如果数字等于其中一个界限,则变为零:

如果边界是包含的:

代码语言:javascript
运行
复制
(x - 1) * (100 - x) >= 0

代码语言:javascript
运行
复制
(x - min) * (max - x) >= 0

如果边界是独占的:

代码语言:javascript
运行
复制
(x - 1) * (100 - x) > 0

代码语言:javascript
运行
复制
(x - min) * (max - x) > 0
票数 93
EN

Stack Overflow用户

发布于 2010-07-07 01:35:16

为了增加这里的干扰,您可以创建一个扩展方法:

代码语言:javascript
运行
复制
public static bool IsWithin(this int value, int minimum, int maximum)
{
    return value >= minimum && value <= maximum;
}

这会让你做一些像这样的事情。

代码语言:javascript
运行
复制
int val = 15;

bool foo = val.IsWithin(5,20);

也就是说,当检查本身只有一行时,这似乎是一件愚蠢的事情。

票数 71
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3188672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档