C#数值的大小范围限制处理.
2014-11-21 16:17
281 查看
一个参数,有时候需要在正常的范围内才可以往下传递处理.比如进度条的值等.
所以需要先检测并处理下. 如下代码:
public static partial class 扩展方法
{
/// <summary>
/// 保证返回数据为范围内的数值.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="待测值">The 待测值.</param>
/// <param name="最小">The 最小.</param>
/// <param name="最大">The 最大.</param>
/// <returns>T.</returns>
public static T 范围限制<T>(T 待测值, T 最小, T 最大) where T : IComparable
{
var 大 = (待测值.CompareTo(最小) > 0) ? 待测值 : 最小;
var 小 = (大.CompareTo(最大) > 0) ? 最大 : 大;
return 小;
}
public static int 范围限制(this int 待测值, int 最小, int 最大)
{
return Math.Min(最大, Math.Max(待测值, 最小));
}
public static double 范围限制(this double 待测值, double 最小, double 最大)
{
return Math.Min(最大, Math.Max(待测值, 最小));
}
}
仅仅使用泛型方法即可处理常见的值类型.
测试方法如下:
[TestClass]
public class 范围限制_test
{
[TestMethod]
public void 范围限制_T_测试()
{
var k = 2.0d.范围限制(1, 3);
Assert.AreEqual(2.0d, k);
k = 2.0d.范围限制(3, 5);
Assert.AreEqual(3.0d, k);
k = 2.范围限制(0, 1);
Assert.AreEqual(1, k);
var k2 = 扩展方法.范围限制<int>(2, 1, 3);
Assert.AreEqual(2, k2);
k2 = 扩展方法.范围限制<int>(2, 3, 5);
Assert.AreEqual(3, k2);
k2 = 扩展方法.范围限制<int>(2, 0, 1);
Assert.AreEqual(1, k2);
var k3 = 扩展方法.范围限制("b", "a", "c");
Assert.AreEqual("b", k3);
k3 = 扩展方法.范围限制("a", "b", "c");
Assert.AreEqual("b", k3);
k3 = 扩展方法.范围限制("d", "b", "c");
Assert.AreEqual("c", k3);
}
}
所以需要先检测并处理下. 如下代码:
public static partial class 扩展方法
{
/// <summary>
/// 保证返回数据为范围内的数值.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="待测值">The 待测值.</param>
/// <param name="最小">The 最小.</param>
/// <param name="最大">The 最大.</param>
/// <returns>T.</returns>
public static T 范围限制<T>(T 待测值, T 最小, T 最大) where T : IComparable
{
var 大 = (待测值.CompareTo(最小) > 0) ? 待测值 : 最小;
var 小 = (大.CompareTo(最大) > 0) ? 最大 : 大;
return 小;
}
public static int 范围限制(this int 待测值, int 最小, int 最大)
{
return Math.Min(最大, Math.Max(待测值, 最小));
}
public static double 范围限制(this double 待测值, double 最小, double 最大)
{
return Math.Min(最大, Math.Max(待测值, 最小));
}
}
仅仅使用泛型方法即可处理常见的值类型.
测试方法如下:
[TestClass]
public class 范围限制_test
{
[TestMethod]
public void 范围限制_T_测试()
{
var k = 2.0d.范围限制(1, 3);
Assert.AreEqual(2.0d, k);
k = 2.0d.范围限制(3, 5);
Assert.AreEqual(3.0d, k);
k = 2.范围限制(0, 1);
Assert.AreEqual(1, k);
var k2 = 扩展方法.范围限制<int>(2, 1, 3);
Assert.AreEqual(2, k2);
k2 = 扩展方法.范围限制<int>(2, 3, 5);
Assert.AreEqual(3, k2);
k2 = 扩展方法.范围限制<int>(2, 0, 1);
Assert.AreEqual(1, k2);
var k3 = 扩展方法.范围限制("b", "a", "c");
Assert.AreEqual("b", k3);
k3 = 扩展方法.范围限制("a", "b", "c");
Assert.AreEqual("b", k3);
k3 = 扩展方法.范围限制("d", "b", "c");
Assert.AreEqual("c", k3);
}
}
相关文章推荐
- 详细描述PHP处理web上传文件的流程。如何限制上传文件的大小不能超过某个数值?
- .net的session详解 存储模式 存到数据库中 使用范围与大小限制 生命周期
- 批处理比较数值大小
- MapReduce处理数据平均值与数值大小排行比较
- VC++ 限制窗口的大小范围的方法
- 限制QLineEdit的数值输入范围
- 突破outlook 2010 附件大小超出了允许的范围 限制
- 限制QLineEdit的数值输入范围(一共4种限制器:QDoubleValidator, QIntValidator, QRegExpValidator, 和QRegularExpressionValidator)
- 限制窗体的移动范围和缩放大小
- hdu5057 分块处理,当数值大于数据范围时树状数组 真是巧 将大数据分为小数据来处理
- HTML5 本地存储 localStorage、sessionStorage 的遍历、存储大小限制处理
- 批处理比较数值大小
- 窗口拖动的大小范围限制
- java PlainDocument限制文本框大小双字节的处理
- spring上传文件并限制大小配置以及全局异常处理
- 批处理比较数值大小
- .net的session详解 存储模式 存到数据库中 使用范围与大小限制 生命周期
- jquery限制数值大小的插件
- HTML5 本地存储 localStorage、sessionStorage 的遍历、存储大小限制处理
- String - 大小比较,范围限制