假设我有一个value,我通常会这样做"钳制"它到一个范围,这里是范围[0..1].也就是说,如果它低于范围开始,则将其增加到范围开始,将其增加到范围结束,将其减小到范围结束.
clampedValue = Math.max(0, Math.min(1, value));
Run Code Online (Sandbox Code Playgroud)
是否有内置功能可以夹紧到一个范围内?
在C#中,我经常要将整数值限制为一系列值.例如,如果应用程序需要百分比,则用户输入中的整数不得小于零或大于一百.另一个例子:如果有五个网页可以访问Request.Params["p"],我希望值为1到5,而不是0或256或99999.
我常常写一个非常丑陋的代码,如:
page = Math.Max(0, Math.Min(2, page));
Run Code Online (Sandbox Code Playgroud)
甚至是丑陋的:
percentage =
(inputPercentage < 0 || inputPercentage > 100) ?
0 :
inputPercentage;
Run Code Online (Sandbox Code Playgroud)
在.NET Framework中没有更智能的方法来做这些事情吗?
我知道我可以编写一个通用的方法int LimitToRange(int value, int inclusiveMinimum, int inlusiveMaximum)并在每个项目中使用它,但也许框架中已经有一个神奇的方法了?
如果我需要手动执行,那么在第一个示例中执行我正在执行的操作的"最佳"(即,更简单,更快速)的方法是什么?像这样的东西?
public int LimitToRange(int value, int inclusiveMinimum, int inlusiveMaximum)
{
if (value >= inclusiveMinimum)
{
if (value <= inlusiveMaximum)
{
return value;
}
return inlusiveMaximum;
}
return inclusiveMinimum;
}
Run Code Online (Sandbox Code Playgroud) 我正在写一个代表LED的课程.基本上uintr,g和b的3个值在0到255的范围内.
我是C#的新手,从uint 1开始,这比我想要的大8位.在编写我自己的Clamp方法之前,我在网上找了一个,发现这个很棒的答案提示了一个扩展方法.问题是它无法推断出类型uint.为什么是这样?这段代码已经写完了uint.我必须明确给出类型以使其工作.
class Led
{
private uint _r = 0, _g = 0, _b = 0;
public uint R
{
get
{
return _r;
}
set
{
_r = value.Clamp(0, 255); // nope
_r = value.Clamp<uint>(0, 255); // works
}
}
}
// https://stackoverflow.com/a/2683487
static class Clamp
{
public static T Clamp<T>(this T val, T min, T max) where T : IComparable<T>
{
if (val.CompareTo(min) < 0) return min;
else if (val.CompareTo(max) …Run Code Online (Sandbox Code Playgroud) 我声明一个这样的变量:
public static int aBtn;
Run Code Online (Sandbox Code Playgroud)
但是唯一的有效值是0、1、2、3、4和5
有什么方法可以避免以后在限制代码时避免代码出现任何问题,以便在尝试将值设置为6时发生异常。
请注意,我仍然希望能够执行以下操作:
aBtn = aBtn + 1;
Run Code Online (Sandbox Code Playgroud) 我不确定“夹紧”是否是正确的术语,但我真的不知道还能称呼它什么。假设我们想要将一个整数限制在某个任意范围内,例如 0-50。这可以通过使用 if 语句测试当前值并相应地分配最大值或最小值来轻松实现。但是,使整数保持最大值或最小值的最快方法是什么?
我需要找出一个decimal值是否适合一个类型(在运行时检测到目标类型)并将其截断为最大值或最小值,如果不是这样我可以通过网络发送它.
我想避免使用类型的大切换句子,我想可能已经在.NET Framework中有了一些东西.
c# ×6
.net ×3
clamp ×2
casting ×1
generics ×1
java ×1
math ×1
performance ×1
terminology ×1
types ×1
validation ×1