当前位置: 首页 > 编程语言 > C#

如何强制数字在C#范围内?Share

时间:2023-04-10 17:43:55 C#

如何在C#中强制数字在范围内?在C#中,我经常想将整数值限制在一个值范围内。例如,如果应用程序需要百分比,则用户输入的整数不得小于零或大于一百。另一个例子:如果有五个网页通过Request.Params["p"]访问,我希望值从1到5,而不是0或256或99999。我经常写一个非常难看的代码,比如:page=Math.Max(0,Math.Min(2,page));甚至丑陋:percentage=(inputPercentage100)?0:输入百分比;在.NETFramework中难道没有更聪明的方法来做这些事情吗?我知道我可以写一个通用方法intLimitToRange(intvalue,intinclusiveMinimum,intinlusiveMaximum)并在每个项目中使用它,但也许框架中已经有一个神奇的方法?如果我需要手动执行,那么在第一个示例中执行此操作的“最佳”(即更简单、更快)方法是什么?是这样的吗?publicintLimitToRange(intvalue,intinclusiveMinimum,intinlusiveMaximum){if(value>=inclusiveMinimum){if(value<=inlusiveMaximum){返回值;}返回inlusiveMaximum;}返回inclusiveMinimum;由此提出:publicstaticclassInputExtensions{publicstaticintLimitToRange(thisintvalue,intinclusiveMinimum,intinclusiveMaximum){if(valueinclusiveMaximum){returninclusiveMaximum;}返回值;}}用法:intuserInput=...;intresult=userInput.LimitToRange(1,5)请参阅:扩展方法此操作称为“钳位”,通常写为:publicstaticintClamp(intvalue,intmin,intmax){返回(值最大值)?最大值:值;一种更简洁的方法,不仅可以处理整数(取自我自己的共享代码库):publicstaticTClamp(Tvalue,Tmin,Tmax)whereT:IComparable{if(value.CompareTo(min)0)returnmax;返回值;}LimitToRange函数的另一种写法如下}返回值;我认为这仍然有效,但更容易理解。我喜欢Guffa的回答,但我很惊讶没有人发布使用Min/Max的解决方案。publicintLimitInclusive(intvalue,intmin,intmax){returnMath.Min(max,Math.Max(value,min));不,没有任何方法可以在框架中构建。我想它被排除在外是因为你已经有了Min和Max,所以你可以用它们来做。如果你为它写你自己的方法,你怎么写都无所谓。如果您使用if语句或条件运算符?,它仍然编译成几乎相同的代码。在不给用户任何输入错误值的反馈的情况下限制该值通常可能不是一个好主意(恕我直言)。这可能会导致以后难以调试的细微错误,尤其是在运行时确定最小/最大值时。想一想。您的银行账户中有100美元,您想转账150美元给您的朋友。您是否希望您的银行系统抛出InsufficientFundsException或与您的朋友讨论您转账150美元但他只收到100美元(假设银行将转账限制为100,因为他们没有足够的资金)话虽如此,你应该另请参阅代码合同。publicvoidMyFunction(Typeinput){Contract.Requires(input>SomeReferenceValue);Contract.Requires(inputThiswillforcetheuserinputtobeintherange.IlikethenameofClamp.IsuggestthefollowingclasspublicclassMathHelper{publicstaticintClamp(intvalue,intmin,intmax){//todo-implementation}publicstaticfloatClamp(floatvalue,floatmin,floatmax){//todo-implementation})或者如果你想使用泛型那么上面的内容就是C#LearningTutorial:HowtoforcenumberstobeinC#范围?如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注---publicclassMathHelper{publicstaticTClamp(Tvalue,Tmin,Tmax)whereT:IComparable{//todo-实现Toutput=value;如果(value.CompareTo(max)>0){返回最大值;}if(value.CompareTo(min)本文采集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载,请注明出处: