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通用仓储类
前言 年底工作比较忙,年度总结还没写,项目要上线,回老家过年各种准备.尤其是给长辈给侄子侄女准备礼物头都大了. 原来想年前先出一版能用的,我看有点悬了,尽量先把大体功能弄出来,扔掉一些,保证能考试,然 ...
随机推荐
- 面试题:JVM类加载机制详解(一)JVM类加载过程 背1
首先Throws(抛出)几个自己学习过程中一直疑惑的问题: 1.什么是类加载?什么时候进行类加载? 2.什么是类初始化?什么时候进行类初始化? 3.什么时候会为变量分配内存? 4.什么时候会为变量赋默 ...
- laravel的mvc
- Shiro——认证概述
认证流程 身份认证流程 首先调用 Subject.login(token) 进行登录,其会自动委托给SecurityManager SecurityManager 负责真正的身份验证逻辑:它会委托给A ...
- .net 空接合操作符 ??
C# 提供了一个所谓的 ”空接合操作符“ - 即??操作符,他要获取两个操作数. 假如左边的操作数部位null,就返回这个操作数.如果左边的操作数为null就返回右边. 空接合操作符一个妙处在于,它既 ...
- Invoke()的使用
(最近在看协程) Invoke()方法是一种委托机制 Invoke ( "SendMsg", 3 ), 意思是3秒之后调用 SendMsg() 方法 使用时应该注意以下几点: 1. ...
- Castle Windsor
让我们从Web API的集成点开始,它们是IDependencyResolver和IDependencyScope接口.IDependencyResolver和其他接口的名称可能与MVC中的接口相同, ...
- angular 重定向路由
const routes: Routes = [ { path: '', redirectTo: '/home', pathMatch: 'full' }, { path: 'home', compo ...
- SpringMVC+Hibernate 项目开发之三 (创建SpringMVC项目)
引用(很全面了):http://blog.csdn.net/dhx20022889/article/details/38041039 我只想说默认创建的项目使用的Spring版本可能不是你想要的,可以 ...
- 「BZOJ 5188」「Usaco2018 Jan」MooTube
题目链接 luogu bzoj \(Describe\) 有一个\(n\)个节点的树,边有权值,定义两个节点之间的距离为两点之间的路径上的最小边权 给你\(Q\)个询问,问你与点\(v\)的距离大于等 ...
- ajaxfileupload 跨域 (二级域名) 可行办法
ajaxfileupload 跨二级域名 如 aa.fei.com 到 bb.fei.com 是可行的. 1.首先在html页面 ajaxfileupload上方加入 document.domain= ...