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通用仓储类
前言 年底工作比较忙,年度总结还没写,项目要上线,回老家过年各种准备.尤其是给长辈给侄子侄女准备礼物头都大了. 原来想年前先出一版能用的,我看有点悬了,尽量先把大体功能弄出来,扔掉一些,保证能考试,然 ...
随机推荐
- WCF4.0 –- RESTful WCF Services
转自:http://blog.csdn.net/fangxinggood/article/details/6235662 WCF 很好的支持了 REST 的开发, 而 RESTful 的服务通常是架构 ...
- Linux PulseAudio
一.简介 Linux的声音系统或许是最无序的子系统部分!作为Server来说,声音无足轻重,无人问津,而作为桌面来说太多的实现方案,各有各的长出和不足,ALSA经过多年的发展,基本统一了Linux声卡 ...
- 4.SELECT DISTINCT 语句
在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值. 语法: SELECT DISTINCT 列名称 F ...
- Luogu 4869 albus就是要第一个出场
BZOJ 2844 被NOIP模拟赛题弄自闭了QuQ. 因为本题要求异或,所以自然地构造出线性基,假设本题中给出的数有$n$个,而我们构造出的线性基大小为$m$,那么每一个可以异或出来的数相当于出现了 ...
- Flask框架 之 路由和视图详解
路由+视图 我们之前了解了路由系统是由带参数的装饰器完成的. 路由本质:装饰器和闭包实现的. 路由设置的两种方式 来看个例子. @app.route('/index') def index(): re ...
- C# 把本地文件上传到服务器上,和从服务器上下载文件
方法一.通过Ajax方式上传文件(input file),使用FormData进行Ajax请求 <div > <input type="file" name=& ...
- 关于instanceof测试遇到的问题
今天上上课 用 instanceof关键字来判断某个对象是否属于某种数据类型.报错 代码如下 package cn.lijun.demo3; import cn.lijun.demo.Person; ...
- 常用eclipse插件
http://dist.springsource.com/release/TOOLS/update/e4.4/ http://propedit.sourceforge.jp/eclipse/upda ...
- C# winform中Setting.settings 相关知识点
1.在Settings.settings文件中定义配置字段.包含字段名.类型.范围.值四部分的属性. 字段名.类型和值类似编程中字段的定义一样使用,不再过多的解释.重点讲一下”范围“字段的含义与区别. ...
- 【转】MOCK方法介绍
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://baidutech.blog.51cto.com/4114344/743740 1 ...