每一个有想法的程序员,都会有自己的一系列收藏xxxHelper/xxxUtility。
X组件遵循宁缺毋滥的原则,只封装最为必要的助手类。
Nuget包:NewLife.Core
源码:https://github.com/NewLifeX/X/blob/master/NewLife.Core/Common/Utility.cs
视频:https://www.bilibili.com/video/BV1gq4y1g78w/
概述
Utility是X组件最常用的助手类,引用几百上千次,位于System命名空间。
Utility采用静态类扩展Object方式提供服务,内部默认实现 DefaultConvert,可重载修改逻辑,赋值覆盖 Utility.Convert 属性。
大部分转换方法带有defaultValue参数,在转换失败时不会抛出异常,而是返回默认值!
整型ToInt
最常用的类型转换,没有之一,特别在web开发时。
主要功能点:
- 字符串转整数,支持全角数字,可过滤掉逗号记数法中的逗号
- 时间日期转整数,转Unix秒,也就是1970年以来总秒数
- 时间点转整数,也是转Unix秒,但是带时区,支持UTC
- 字节数组转整数,默认小字节序 BitConverter.ToInt32,常用于协议解析
- 通用版 Convert.ToInt32,异常时返回默认值
强烈推荐,web开发时使用-1作为默认值,因为很多时候0具有业务意义。
如:var userId=p["userId"].ToInt(-1)
,如果userId为-1,表示没有传递该参数,且可以接收 userId=0 的参数。
长整型ToLong
最常用的类型转换,没有之一,特别在web开发时。
主要功能点:
- 字符串转整数,支持全角数字,可过滤掉逗号记数法中的逗号
- 时间日期转整数,转Unix毫秒,也就是1970年以来总毫秒数
- 时间点转整数,也是转Unix毫秒,但是带时区,支持UTC
- 字节数组转整数,默认小字节序 BitConverter.ToInt64,常用于协议解析
- 通用版 Convert.ToInt64,异常时返回默认值
浮点数ToDouble
只有双精度浮点数,需要单精度浮点数时,可以解析双精度后再强转为单精度。
主要功能点:
- 字符串转浮点数,支持全角数字
- 字节数组转浮点数,默认小字节序,BitConverter.ToDouble
- 通用版 Convert.ToDouble,异常时返回默认值
布尔型ToBoolean
任意对象转为布尔型,主要是对true/false字符串的支持
主要功能:
- 字符串转布尔型,特别支持true/false字符串,支持全角数字,非零数字为true
- 通用版 Convert.ToBoolean,异常时返回默认值
推荐web开发中用可空类型:
Boolean? enable = p["enable"]?.ToBoolean();
时间日期ToDateTime/ToFullString
由于时间日期的字符串表示方式在全球没有统一,即使在中国也有很多种写法,因此这块特别常用。
在X组件内部,时间日期的标准格式是:yyyy-MM-dd HH:mm:ss
,标准默认值是:DateTime.MinValue
ToDateTime主要功能:
- 字符串转时间日期,支持UTC,支持格式 yyyy-M-d 、 yyyy/M/d 、 yyyyMMddHHmmss 、 yyyyMMdd
- 整型转时间日期,Unix秒,1970年以来秒数
- 长整型转时间日期,Unix毫秒,1970年以来毫秒数,如果小于100年,则使用Unix秒
- 通用版 Convert.ToDateTime,异常时返回默认值
ToFullString主要功能:最高性能把时间日期转为yyyy-MM-dd HH:mm:ss
字符串,支持UTC。
普通的DateTime.ToString(format)在千万级次数时有性能问题。
emptyValue参数用于只是时间为最小值时的返回值,在web中一般使用String.Empty,避免显示 0001-01-01 00:00:00 的时间
时间点ToDateTimeOffset/ToFullString
时间点DateTimeOffset比DateTime多了一个时区偏移量,因此全部支持UTC时区。
在X组件内部,时间日期的标准格式是:yyyy-MM-dd HH:mm:ss +08:00
,标准默认值是:DateTimeOffset.MinValue
ToDateTime主要功能:
- 字符串转时间点,支持时区,支持格式 yyyy-M-d 、 yyyy/M/d 、 yyyyMMddHHmmss 、 yyyyMMdd
- 整型转时间点,Unix秒,1970年以来秒数
- 长整型转时间点,Unix毫秒,1970年以来毫秒数,如果小于100年,则使用Unix秒
- 通用版 Convert.ToDateTime,异常时返回默认值
ToFullString主要功能:最高性能把时间日期转为yyyy-MM-dd HH:mm:ss +08:00
字符串,支持UTC。
普通的DateTimeOffset.ToString(format)在千万级次数时有性能问题。
emptyValue参数用于只是时间为最小值时的返回值,在web中一般使用String.Empty,避免显示 0001-01-01 00:00:00 的时间
异常处理GetTrue/GetMessage
GetTrue用于提起最内层异常对象,支持AggregateException、TargetInvocationException、TypeInitializationException。
GetMessage用于简化Exception.ToString()得到的调用栈信息,特别时异步编程中出现的大量价值不大的调用栈行信息。