标签:
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; } } }
标签:
原文地址:http://www.cnblogs.com/q101301/p/4872474.html