C#带ref和out的反射使用
来源:互联网 发布:qq三国js技能饮血 编辑:程序博客网 时间:2024/05/26 02:21
摘自 C# TextBox 扩展方法数据验证 这篇文章推荐阅读
public static TResult GetValue<TResult>(this TextBox textBox, Action<TextBox> failed)
where TResult : struct{
var type = typeof(TResult);
var method = type.GetMethod("TryParse", new Type[] { typeof(string), type.MakeByRefType() });
var parameters = new object[] { textBox.Text, default(TResult) };
// 若转换失败,执行failed
if (!(bool)method.Invoke(null, parameters))
{
failed(textBox);
throw new InvalidCastException("输入值格式不正确,请检查输入值。");
}
return (TResult)parameters[1];
}
这里采用反射机制来调用类型的T.TryParse(string param, out T value),例如Int32.TryParse(string param,out Int32 value)等,需要注意的是:
(1). GetMethod()方法,必须传入合适的参数(要反射的方法的签名)来确定方法唯一,例如碰到重载这种情况(比较常见),否则返回值为null,方法的签名中,若参数带有ref 或out 关键字,则Type类型需要加上.MakeByRefType(),如上。
(2). 得到唯一的方法实例后,可以传入相应的参数,调用Invoke方法来实现方法的调用,MethodInfo.Invoke(object obj, object[] parameters)方法第一个参数为反射调用该方法的对象,如果为静态方法(比如本例),可以传入null,第二个参数为方法的参数,顺序必须与方法签名一致。
(3). 方法参数中带有ref和out关键字,获得该值通过参数数组来获得。如本例中:parameters[1]
0 0
- C#带ref和out的反射使用
- C# ref和out参数的使用
- c# ref out 的使用
- C# 中ref和out的使用和区别
- ref和out的使用
- C#中ref和out的使用小结
- C#中ref和out的使用小结
- C#中ref和out的使用小结
- C#中ref和out的使用小结
- C#中ref和out的使用小结
- C#中ref和out的使用小结(ZZ)
- C#中ref和out的使用小结
- C#中ref和out的使用小结
- C#中ref和out的使用小结
- C#中ref和out的使用小结
- C#中ref和out的使用小结
- C#中ref和out的使用小结
- C#中ref和out的使用小结
- 基于文件过滤驱动的透明加解密
- DataTable简介
- 简单区分Vmware的三种网络连接模式(bridged、NAT、host-only)
- BZOJ 3993 [SDOI2015]星际战争 二分+最大流
- IOS项目集成ShareSDK实现第三方登录、分享、关注等功能
- C#带ref和out的反射使用
- 云栖2015
- 为快速开发平台一级菜单加入功能导航页
- 认识Pascal
- HTTP状态码
- QSemaphore 类例子
- Regional 2015 - Asia Changchun - B Count a × b
- 存储模型
- Google官方 下拉刷新组件SwipeRefreshLayout 简单实现