扩展方法

来源:互联网 发布: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
原创粉丝点击