1、ASP.NET MVC入门到精通——新语法

C#特性 扩展方法

主要用于泛型集合和泛型类

扩展方法的本质:编译时,直接将 str.WriteSelf(2015) 替换成 StringUtil.WriteSelf(str,2015);
想为一个类型添加一些成员 , 怎么办?
扩展方法:

 class Program
    {
        static void Main(string[] args)
        {
            string str = "2015-01-01";
            //调用静态方法
            DateTime resualt = str.ToTry(DateTime.Now);
            Console.Write(resualt);
            Console.Write(resualt.GetType());
            Console.ReadKey();
        }
    }
    /// <summary>
    /// 扩展方法静态类
    /// </summary>
    public static class ConvertToType
    {
        /// <summary>
        /// 扩展方法 关键字 this
        /// </summary>
        /// <param name="value">被转的类型</param>
        /// <returns>默认返回0</returns>
        public static int ToTry(this string value)
        {
            int temp = 0;
            if (!string.IsNullOrEmpty(value))
            {
                try
                {
                    int.TryParse(value, out temp);
                }
                catch
                {
                    temp = 0;
                }
            }
            return temp;
        }


        /// <summary>
        ///数据类型转换
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="value"></param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static T ToTry<T>(this object value, T defaultValue)
        {
            //1 确定T 的类型 2 Object 的类型
            //在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T:
            //default 关键字 若T为引用类型则返回null,值类型返回0,null 返回 System.Nullable(Of T)
            object startValue = default(T);

            if (value != null)
            {
                //typeof和getType()区别
                //typeof 用于类型
                //gettype 用于 类型实例化后
                // Test t=new Test() t.gettype() 和 typeof(T)
                try
                {
                    Type convertType = typeof(T);
                    if (convertType == typeof(String))
                    {
                        startValue = value.ToString();
                    }
                    if (convertType == typeof(Int32))
                    {
                        startValue = Convert.ToInt32(value);
                    }
                    if (convertType == typeof(DateTime))
                    {
                        startValue = Convert.ToDateTime(value);
                    }
                    return (T)startValue;
                }
                catch
                {
                    return defaultValue;
                }
            }
            else
            {
                return defaultValue;
            }
        }
    }
原文地址:https://www.cnblogs.com/q101301/p/4872474.html