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 == )
{
if (typeof(T) == typeof(int))
{
Min = (T)(object)(int.Parse(arr[]));
Max = (T)(object)(int.Parse(arr[]));
}
else if (typeof(T) == typeof(decimal))
{
Min = (T)(object)(decimal.Parse(arr[]));
Max = (T)(object)(decimal.Parse(arr[]));
} 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 == )
{
Min = converter(arr[]);
Max = converter(arr[]);
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) > )
{
T temp = Max;
Max = Min;
Min = temp;
}
}
}

最近做了点修改(支持传空,或者空字符串等非法值)

代码如下

/// <summary>
/// 公共
/// </summary>
/// <typeparam name="T">T</typeparam>
[Serializable]
public class Zone<T> where T : struct,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 == )
{
if (typeof(T) == typeof(int))
{
Min = (T)(object)(int.Parse(arr[]));
Max = (T)(object)(int.Parse(arr[]));
}
else if (typeof(T) == typeof(decimal))
{
Min = (T)(object)(decimal.Parse(arr[]));
Max = (T)(object)(decimal.Parse(arr[]));
} 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 == )
{
Min = converter(arr[]);
Max = converter(arr[]);
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);
} /// <summary>
/// 交换最大最小值
/// </summary>
private void Swap()
{
if (!Min.HasValue || !Max.HasValue)
{
return;
} if (Min.Value.CompareTo(Max.Value) > )
{
T temp = Max.Value;
Max = Min;
Min = temp;
}
} /// <summary>
/// Called when [deserialized].
/// </summary>
/// <param name="context">The context.</param>
[OnDeserialized]
private void OnDeserialized(StreamingContext context)
{
if (!this.Min.HasValue)
{
this.Min = default(T);
} if (!this.Max.HasValue)
{
if (typeof(T) == typeof(decimal))
{
this.Max = (T)(object) decimal.MaxValue;
}
else if (typeof(T) == typeof(int))
{
this.Max = (T)(object)int.MaxValue;
}
}
}
}

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

  1. php 通用redis类

    php 通用redis类 <?php /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时,才会返回false. * 这点可用于防止 ...

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

    [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能 ...

  3. [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类

    [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...

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

    本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如No ...

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

    本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如No ...

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

    本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如No ...

  7. Xml通用操作类

    using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml ...

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

    [前言] 作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是做的很成熟,我们可以方便地调用ADO.Net操作各类关系型数据库,在使用了多年的Sql_Helper_DG后,由于项目需 ...

  9. 用MVC5+EF6+WebApi 做一个考试功能(六) 仓储模式 打造EF通用仓储类

    前言 年底工作比较忙,年度总结还没写,项目要上线,回老家过年各种准备.尤其是给长辈给侄子侄女准备礼物头都大了. 原来想年前先出一版能用的,我看有点悬了,尽量先把大体功能弄出来,扔掉一些,保证能考试,然 ...

随机推荐

  1. dataframe 用法总结

    http://pda.readthedocs.io/en/latest/chp5.html data = [] 列表初始化 data = (,) data = {} 字典初始化 data = pd.D ...

  2. location.reload() 和 location.replace()的区别和应用

    首先介绍两个方法的语法: reload 方法,该方法强迫浏览器刷新当前页面.语法: location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 fals ...

  3. mysql 游标CURSOR

    FETCH cursor_works INTO num,provinceIDs,cityIDs,SourceID; 定义的变量值必须与 游标中的字段不同,一一对应 DECLARE cursor_wor ...

  4. CSVHelper 导出CSV 格式

    public class CSVHelper { System.Windows.Forms.SaveFileDialog saveFileDialog1;//保存 private string hea ...

  5. Android 自定义ViewGroup,实现侧方位滑动菜单

    侧方位滑动菜单 1.现在adnroid流行的应用当中很多都是用的侧方位滑动菜单如图:

  6. duilib入门简明教程 -- 自绘标题栏(5)

       如果大家有做过标题栏的自绘,肯定会感慨各种不容易,并且现有的一些资料虽然完美的实现了功能,但是代码比较乱,需要自行整理.如果用duilib,就是小case啦.     duilib其实并没有区分 ...

  7. 使用 Windows Phone 8 文件和 URI 关联的自动启动应用

    更详细,猛撸这里:http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/jj206987(v=vs.105).aspx 在WMApp ...

  8. raiden_graph

    使用mermaid描述 raiden 通道 AB,正常状态 graph LR A-- 60,100,S_100 ---B 通道 AB closed graph LR A((A)) -. 60,100 ...

  9. Promise超时情况

    export const ERROR_PROMISE_TIMEOUT = 'ERROR_PROMISE_TIMEOUT'; export default function (promise, time ...

  10. 玩转php缓存memcache

    记录 一.本地安装 链接:https://www.cnblogs.com/jkko123/p/6294669.html 二.linux安装