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通用仓储类
前言 年底工作比较忙,年度总结还没写,项目要上线,回老家过年各种准备.尤其是给长辈给侄子侄女准备礼物头都大了. 原来想年前先出一版能用的,我看有点悬了,尽量先把大体功能弄出来,扔掉一些,保证能考试,然 ...
随机推荐
- 61-结点选择(树形dp)
http://lx.lanqiao.cn/problem.page?gpid=T14 算法训练 结点选择 时间限制:1.0s 内存限制:256.0MB 问题描述 有一棵 n 个 ...
- 面试题:基础数据类型 包装类 int Integer
因为在学习集合时知道集合里存放的对象都是Object类型,取出的时候需要强制类型转换为目标类型(使用泛型集合不需要),如int a = (Integer)arrayList.get(0):然后我们就会 ...
- 面试题:String StringBufere StringBuilder 不用看
一.String 使用 private final char value[]来实现字符串存储 所以String对象创建之后就不能再修改此对象中存储的字符串内容,所以说String本质是字符数组char ...
- quilljs 一款简单轻量的富文本编辑器(适合移动端)
quilljs入门使用教程: quill.js是一款强大的现代富文本编辑器插件.该富文本编辑器插件支持所有的现代浏览器.平板电脑和手机.它提供了文本编辑器的所有功能,并为开发者提供大量的配置参数和方法 ...
- ShopNc登录验证码
- ios7适配--uitableviewcell选中效果
ios7 UITableViewCell selectionStyle won't go back to blue up vote6down votefavorite 2 Xcode 5.0, iOS ...
- 编写高质量代码改善C#程序的157个建议——建议46:显式释放资源需继承接口IDisposable
建议46:显式释放资源需继承接口IDisposable C#中的每一个类型都代表一种资源,资源分为两类: 托管资源:由CLR管理分配和释放的资源,即从CLR里new出来的对象. 非托管资源:不受CLR ...
- 编写高质量代码改善C#程序的157个建议——建议39:了解委托的实质
建议39:了解委托的实质 理解C#中的委托需要把握两个要点: 1)委托是方法指针. 2)委托是一个类,当对其进行实例化的时候,要将引用方法作为它的构造方法的参数. 设想这样一个场景:在点对点文件传输过 ...
- 操作文件方法简单总结(File,Directory,StreamReader,StreamWrite ) - Zery-zhang
一 基本介绍 操作文档,文件夹,需要用到的类 1 Directory (静态类) : 用于创建.移动和删除等操作通过 目录 和子 目录 DirectoryInfo (非静态): 2 File ...
- EasyUI控件combobox重复请求后台,dialog窗口数据异常
最近在用Easy UI+Dapper+MVC4 开发一个财务收款系统,其中就发现一些小问题,供有需要的人参考. 1.EasyUI控件combobox 数据绑定 出现重复请求后台 上代码: <td ...