C#数值的大小范围限制处理.

一个参数,有时候需要在正常的范围内才可以往下传递处理.比如进度条的值等.

所以需要先检测并处理下. 如下代码:

 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);
        }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值