Expression 反射调用TryParse
来源:互联网 发布:捷安特淘宝旗舰店 编辑:程序博客网 时间:2024/05/16 19:30
public static class StringExtenssion { #region ///string 转其他类型数据 /// <summary> /// TryParse委托 /// </summary> /// <typeparam name="TStr">String</typeparam> /// <typeparam name="TOut">Out T</typeparam> /// <typeparam name="TResult">返回值</typeparam> /// <param name="str">要转换的字符串</param> /// <param name="outValue">out 输出参数</param> /// <returns>成功true,失败false</returns> public delegate TResult FuncEx<T1, TOut, TResult>(T1 str, out TOut outValue); /// <summary> /// Parse /// </summary> /// <typeparam name="T"></typeparam> /// <param name="str"></param> /// <param name="defaultValue"></param> /// <returns></returns> public static T Parse<T>(this string str) { Type t = typeof(T); var param_str = Expression.Parameter(typeof(string)); var method = typeof(T).GetMethod("Parse", new Type[] { typeof(string)}); //方法不存在 if (method == null) { throw new Exception("找到不Parse方法"); } var methodExp = Expression.Call(method, param_str); var parse = Expression.Lambda<Func<string,T>>(methodExp, param_str).Compile(); return parse(str); } /// <summary> /// TryParse /// </summary> /// <typeparam name="T"></typeparam> /// <param name="str"></param> /// <param name="defaultValue"></param> /// <returns></returns> public static T TryParse<T>(this string str, T defaultValue) { Type t = typeof(T); T outValue = defaultValue; var param_str = Expression.Parameter(typeof(string)); var param_outValue = Expression.Parameter(typeof(T).MakeByRefType()); var method = typeof(T).GetMethod("TryParse", new Type[] { typeof(string), typeof(T).MakeByRefType() }); //方法不存在 if (method == null) { return defaultValue; } var methodExp = Expression.Call(method, param_str, param_outValue); var tryParse = Expression.Lambda<FuncEx<string, T, bool>>(methodExp, param_str, param_outValue).Compile(); return tryParse(str, out outValue) ? outValue : defaultValue; } #endregion }
0 0
- Expression 反射调用TryParse
- java反射Statement和Expression
- 反射调用
- 反射调用
- 反射调用
- Expression Tree Visualizer 的调用
- 反射:使用反射调用方法
- DateTime TryParse
- <笔记>TryParse
- UInt32.TryParse
- java反射调用方法
- 通过反射调用FORM
- 反射调用Assembly
- 反射动态调用
- 反射的调用方法
- dock窗体反射调用
- 动态调用WebService反射
- C#反射实例调用
- 官博粉碎谣言 下代Surface或2015年发布
- Android_编程规范与常用技巧
- 华为机试题 等式变换
- POJ 2991 Crane(线段树+计算几何)
- Java集合类
- Expression 反射调用TryParse
- Oracle10g 服务丢失处理办法
- android每日面试题3
- 数据库名和实例
- C#数字图像处理<八>
- PHP,JAVA,NET 开发比较
- 微软在为Android Wear开发输入法
- Qt生成.pri文件
- 线性表的思维导图