C# 通用区间类

public class Zone<T> where T : IComparable<T>
    {
        /// <summary>
        /// .ctor
        /// </summary>
        public Zone()
        {

        }

        /// <summary>
        /// .ctor
        /// </summary>
        /// <param name="briefString">字符串,如("3-5")</param>
        public Zone(string briefString)
        {
            //T min, max;
            string[] arr = briefString.Split(‘-‘);
            if (arr.Length == 2)
            {
                if (typeof(T) == typeof(int))
                {
                    Min = (T)(object)(int.Parse(arr[0]));
                    Max = (T)(object)(int.Parse(arr[1]));
                }
                else if (typeof(T) == typeof(decimal))
                {
                    Min = (T)(object)(decimal.Parse(arr[0]));
                    Max = (T)(object)(decimal.Parse(arr[1]));
                }

                Swap();
            }
        }

        /// <summary>
        /// .ctor
        ///  调用如下
        ///  var sdsd = "3-5";
        ///  var zone = new Zone<int>(sdsd, p => int.Parse(p));
        ///  var zone2 = new Zone<decimal>(sdsd, p => decimal.Parse(p));
        /// </summary>
        /// <param name="briefString">字符串,如("3-5")</param>
        /// <param name="converter">转换方法.</param>
        public Zone(string briefString, Converter<string, T> converter)
        {
            //T min, max;
            var arr = briefString.Split(‘-‘);
            if (arr.Length == 2)
            {
                Min = converter(arr[0]);
                Max = converter(arr[1]);
                Swap();
            }
        }

        /// <summary>
        /// 小值
        /// </summary>
        public T Min { get; set; }

        /// <summary>
        /// 大值
        /// </summary>
        public T Max { get; set; }

        /// <summary>
        /// ToString()
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return string.Format("{{Min:{0},Max:{1}}}", Min, Max);
        }

        /// <summary>
        /// 返回简短的String描述
        /// </summary>
        /// <returns></returns>
        public string ToBriefString()
        {
            return string.Format("{0}-{1}", Min, Max);
        }

        private void Swap()
        {
            if (Min.CompareTo(Max) > 0)
            {
                T temp = Max;
                Max = Min;
                Min = temp;
            }
        }
    }
时间: 2024-08-25 05:13:09

C# 通用区间类的相关文章

[.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) JSON序列化利器 Newtonsoft.Json 及 通用Json类

[.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) JSON序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能不了解Json.net(Newtonsoft.Json)这款世界级的开源类库,除了拥有良好的性能之外,功能也是非常强大的. 本节会详细说明这个类库.此外,对于不喜欢使用第三方类库的同学,会整理一个基于微软类库的通用Json类. 读前必备: 本节主要介绍一款第三方类库和一个自己整理封装的类库,说起到封装

C#:数据库通用访问类 SqlHelper

using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using System.Globalization; using System.IO; using System.Text.RegularExpressions; using System.Xml; using System.Reflection;

Hibernate 通用DAO类

1.通用接口类 package org.lzpeng.dao; import java.io.Serializable; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.criterion.Criterion; import org.springside.modules.orm.hibernate.Page; /**  *   * @ver

通用窗口类 Inventory Pro 2.1.2 Demo1(下续篇 ),物品消耗扇形显示功能

本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如NoticeUI等). 本篇涉及的功能用加出标出,具体的功能如下: 1.实现了两个窗口,通过点击键盘I来,打开或者关闭窗口也就是Toggle功能 2.装备窗口中的物品栏空格数量动态生成可控,可以在属性窗口手动配置 3.窗口具有拖拽功能 4.窗口物品具有拖拽,及窗口间拖拽 5.可以在窗口使用物品的功能,物

通用窗口类 Inventory Pro 2.1.2 Demo1(下)

本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如NoticeUI等). 本篇涉及的功能用加出标出,具体的功能如下: 1.实现了两个窗口,通过点击键盘I来,打开或者关闭窗口也就是Toggle功能 2.装备窗口中的物品栏空格数量动态生成可控,可以在属性窗口手动配置 3.窗口具有拖拽功能 4.窗口物品具有拖拽,及窗口间拖拽 5.可以在窗口使用物品的功能,物

通用窗口类 Inventory Pro 2.1.2 Demo1(中)

本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如NoticeUI等). 本篇涉及的功能用加出标出,具体的功能如下: 1.实现了两个窗口,通过点击键盘I来,打开或者关闭窗口也就是Toggle功能 2.装备窗口中的物品栏空格数量动态生成可控,可以在属性窗口手动配置 3.窗口具有拖拽功能 4.窗口物品具有拖拽,及窗口间拖拽 5.可以在窗口使用物品的功能,物

entity framework 6 自己编写的通用数据类

//dal类: public class BaseDAL { string strConn = ""; public BaseDAL(string connString) { strConn = connString; } #region 通用增删改查 #region 非原始sql语句方式 /// <summary> /// 新增 /// </summary> /// <param name="entity">实体</par

C#操作SqlServer MySql Oracle通用帮助类Db_Helper_DG(默认支持数据库读写分离、查询结果实体映射ORM)

[前言] 作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是做的很成熟,我们可以方便地调用ADO.Net操作各类关系型数据库,在使用了多年的Sql_Helper_DG后,由于项目需要,于是乎,就准备写一个Mysql_Helper在实现过程中,发现ADO.Net封装之完善,以及面向对象的封装.继承.多态,有了这些特性,何不把数据库操作封装成为一个通用的类呢,此文由此铺展而来... [实现功能] 这篇文章将要介绍的主要内容如下: 1.ADO.NET之SqlServer 2.ADO

Xml通用操作类

using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml; namespace CommonUtil { /// <summary> /// Xml通用操作类 /// </summary> public class XmlHelper { public XmlHelper() { } /// <summary> /// 创建XM