C# 反射调用方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# 反射调用方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2339字,纯文字阅读大概需要4分钟。
内容图文
![C# 反射调用方法](/upload/InfoBanner/zyjiaocheng/838/9ad706d5ab444710acbd98637d70322c.jpg)
/// <summary> /// 转换参数 /// </summary> /// <param name="paras"></param> /// <returns></returns> public Dictionary<string, string> JosnToDictionary(string paras) { Dictionary<string, string> dictionaryPara = new Dictionary<string, string>(); if (!string.IsNullOrEmpty(paras)) { JObject jobj = JObject.Parse(paras); JToken jsonResult = jobj as JToken; foreach (JProperty item in jsonResult) { dictionaryPara.Add(item.Name, item.Value.ToString()); } } return dictionaryPara; }
/// <summary> /// 反射执行方法 /// </summary> /// <param name="assemblyName"></param> /// <param name="instPath"></param> /// <param name="methodName"></param> /// <param name="paras"></param> /// <returns></returns> public object AssemblyClass(string assemblyName, string instPath, string methodName, string paras, ref string errorMsg) { try { //解析程序集名称 List<string> assemblyNameList = new List<string>(); if (!string.IsNullOrEmpty(assemblyName)) { assemblyNameList = assemblyName.Split(',').ToList(); } //解析参数 Dictionary<string, string> dictionaryPara = JosnToDictionary(paras); //dll文件路径 string baseDirectory = AppDomain.CurrentDomain.BaseDirectory; string loadFile = AppDomain.CurrentDomain.BaseDirectory + "/" + assemblyNameList[0] + ".dll"; Assembly assembly = Assembly.LoadFile(loadFile); Type type = assembly.GetType(instPath); object instance = assembly.CreateInstance(instPath); MethodInfo[] info = type.GetMethods(); Type[] params_type = null; Object[] params_obj = null; for (int i = 0; i < info.Length; i++) { var md = info[i]; if (md.Name == methodName) { //参数集合 ParameterInfo[] paramInfos = md.GetParameters(); params_obj = new Object[paramInfos.Length]; params_type = new Type[paramInfos.Length]; foreach (var item in paramInfos) { foreach (var itemp in dictionaryPara) { if (item.Name == itemp.Key) { var propertyType = Nullable.GetUnderlyingType(item.ParameterType) ?? item.ParameterType; params_type[item.Position] = propertyType; if (propertyType.Name == "DateTime") { if (!string.IsNullOrEmpty(itemp.Value)) { params_obj[item.Position] = DateTime.Parse(itemp.Value); } else { params_obj[item.Position] = null; } } else { params_obj[item.Position] = !string.IsNullOrEmpty(itemp.Value) ? itemp.Value : ""; } break; } } } break; } } object value = type.GetMethod(methodName, params_type).Invoke(instance, params_obj); return value; } catch (Exception ex) { errorMsg = ex.Message; return null; } }
内容总结
以上是互联网集市为您收集整理的C# 反射调用方法全部内容,希望文章能够帮你解决C# 反射调用方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。