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 == )
{
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# 通用区间类的更多相关文章
- php 通用redis类
php 通用redis类 <?php /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时,才会返回false. * 这点可用于防止 ...
- [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类
[.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能 ...
- [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类
[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...
- 通用窗口类 Inventory Pro 2.1.2 Demo1(下续篇 ),物品消耗扇形显示功能
本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如No ...
- 通用窗口类 Inventory Pro 2.1.2 Demo1(下)
本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如No ...
- 通用窗口类 Inventory Pro 2.1.2 Demo1(中)
本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如No ...
- Xml通用操作类
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml ...
- C#操作SqlServer MySql Oracle通用帮助类Db_Helper_DG(默认支持数据库读写分离、查询结果实体映射ORM)
[前言] 作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是做的很成熟,我们可以方便地调用ADO.Net操作各类关系型数据库,在使用了多年的Sql_Helper_DG后,由于项目需 ...
- 用MVC5+EF6+WebApi 做一个考试功能(六) 仓储模式 打造EF通用仓储类
前言 年底工作比较忙,年度总结还没写,项目要上线,回老家过年各种准备.尤其是给长辈给侄子侄女准备礼物头都大了. 原来想年前先出一版能用的,我看有点悬了,尽量先把大体功能弄出来,扔掉一些,保证能考试,然 ...
随机推荐
- MagicNotes:如何迈向工作的坦途
MagicNotes,思绪随风飞扬,不抓住写下来明天就会忘记了. 昨晚在知乎上偶尔看到 @雨农 的关于“为什么我那么努力,吃了那么多苦,也没见那么优秀?”的一个回复,心里有所触动. 本人专科毕业3-4 ...
- Maven——依赖
一.依赖的范围 依赖的范围有几个可选值,我们用得到的是:compile.test.provided 三个. [1]从项目结构角度理解 compile 和 test 的区别 [2]从开发和运行这两个不同 ...
- vis用于做3D图表的js插件
vis.js用于做3D图表:(浏览网站需要FQ)实例:http://visjs.org/graph3d_examples.html代码下载:https://github.com/almende/vis
- javascript总结1:js常见页面消息输出方式 alert confirm console prompt document
.1 js常见的输出方法: 1-1 alert 警告框 alert("js语法总结"); 1-2 confirm 确认方法 confirm("js语法总结"); ...
- jquery表单数据验证扩展方法
/** 表单数据验证 **/ $.fn.Validform = function () { var Validatemsg = ""; var Validateflag = tru ...
- 编写高质量代码改善C#程序的157个建议——建议8: 避免给枚举类型的元素提供显式的值
建议8: 避免给枚举类型的元素提供显式的值 一般情况下,没有必要给枚举类型的元素提供显式的值.创建枚举的理由之一,就是为了代替使用实际的数值.不正确地为枚举类型的元素设定显式的值,会带来意想不到的错误 ...
- Java实现四则运算 谢雅淇 袁杏仪
GitHub链接:https://github.com/3216004716/four-operations.git 项目相关要求 使用 -n 参数控制生成题目的个数,例如 Myapp.exe -n ...
- Oracle累计函数
今天遇到一个客户的报表需求,在shipment的报表中要查看该shipment中的每个PO的采购数量,当前shipment的出货数量以及累计的所有出货数量. 要有累计的出货数,并且是要有顺序的累计出货 ...
- Nexus 私有仓库
Nexus3.6和Nexus2.x安装不同,2.x版本需要安装服务,再启动.而3.6版本则更加简单. 步骤如下: jdk环境:1.8 Nexus3.6解压(注意,路径不要带空格及中文),解压后有两个文 ...
- [.net 多线程] Interlocked实现CAS操作
Interlocked:为多个线程共享的变量提供原子操作. Interlocked.Increment(ref value) 数值加一(原子性操作) Interlocked.Decrement(ref ...