您的位置:首页 > 编程语言 > C#

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# 数据 泛型 扩展