扩展方法
来源:互联网 发布:windows可上网镜像 编辑:程序博客网 时间:2024/06/05 14:07
在写代码“aa.ToString()“的时候有时会想,后面的ToString的方法哪里来的,我能不能写一个ToXX()。查找些资料整理如下。
首先我们需要先将该扩展方法写好。切记,需为静态方法(类和类内的方法都需要静态)。
public static class ConvertType { /// <summary> /// 类型转换,不单单是值类型转换(值类型1,“1”等等) /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="value">值</param> /// <returns></returns> public static T ToType<T>(this object value) { if (value == null || value == DBNull.Value){ return default(T); } try{ return (T)GetValue(value, typeof(T)); } catch{ return default(T); } } public static Nullable<T> ToNullType<T>(this object value) where T : struct //表示只有当值类型才可以使用该方法 { if (value == null || value == DBNull.Value){ return (Nullable<T>)null; } try{ return (T)GetValue(value, typeof(T)); } catch{ return (Nullable<T>)null; } } public static object GetValue(object value, Type type) { switch (type.Name) { case "String": return Convert.ToString(value); case "Int16": return Convert.ToInt16(value); case "Int32": return Convert.ToInt32(value); case "Int64": return Convert.ToInt64(value); case "Boolean": try { //字符串的"true"和"false"都可转换(无论大小写),字符串的"1"无法转换为true,字符串的"0"无法转换为false if (Convert.ToString(value) == "1"){ return true; } if (Convert.ToString(value) == "0"){ return false; } return Convert.ToBoolean(value); } catch{ return false; } case "Byte": return Convert.ToByte(value); case "Decimal": return Convert.ToDecimal(value); case "Double": return Convert.ToDouble(value); case "DateTime": return Convert.ToDateTime(value); default: return value; } } }
以上是已经完成的静态方法,需要使用时,只需引用该类即可。
下面是如何使用。
public void TestConvert() { //实验Boolean var a = "1".ToType<bool>(); var b = "1".ToType<Boolean>(); //实验Int var c = "1".ToType<int>(); var d = "1".ToType<Int32>(); var e = "1".ToType<Int16>(); //实现Convert.ToBoolean //var f = Convert.ToBoolean("1"); var g = Convert.ToBoolean(1); var h = 1; var i = Convert.ToBoolean(h); var j = "True".ToType<bool>(); var k = "true".ToType<bool>(); //可以为null值得值类型 var l = "1".ToType<int?>();//这样是不可行的,返回的结果是null, //typeof(int?)返回的结果是Nullable~1,然后强转(int?)"1"是不行的,报异常的 var m = "1".ToNullType<int>();//利用这样的方法就可以返回int?类型的 }
1 0
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 判断网络是否可用
- LeetCode 257:Binary Tree Paths
- 报错: org.apache.commons.pool2.impl.GenericObjectPoolConfig not found
- java网络协议(IPV4/IPV6)
- Masonry介绍与使用实践:快速上手Autolayout
- 扩展方法
- 判断浏览器版本并进行响应
- JAVA解析html标签
- iOS push
- x264 代码下载信息
- 常用正则表达式
- Angular2与React,前端的未来志向何方?
- uboot系列之-----顶层Makefile分析(一)
- BAT解密:互联网技术发展之路(8)- 用户层技术剖析