利用特性区分查找方法,并通过反射调用方法
如示例代码,buf带描述标记
/// <summary> /// 分析 数据 /// </summary> /// <param name="buf"></param> public void AnalysisDatabuf(string buf) { if (string.IsNullOrEmpty(buf)) return; try { string optNo = buf.Substring(0, 5); string description = string.Empty; DescriptionAttribute descriptionAttribute = null; //获取方法集 MethodInfo[] methodInfos = this.GetType().GetMethods(); //根据特性找方法 foreach (var v in methodInfos) { object[] customAttributes = v.GetCustomAttributes(false); if (null != customAttributes && customAttributes.Length > 0) { descriptionAttribute = customAttributes[0] as DescriptionAttribute; if (null == descriptionAttribute) continue; description = descriptionAttribute.Description; //找到方法后,调用方法 if (description.ToUpper() == optNo.ToUpper()) { v.Invoke(this, new object[] { buf }); break; } } } } catch (Exception ex) { string methodName = System.Reflection.MethodInfo.GetCurrentMethod().Name; string errStr = string.Format("错误源:{3}\r\n类名:{0} 函数:{1} 错误描述:{2}", this.GetType().Name, methodName, ex.Message, ex.Source); LogService.Instance.Fatal("执行函数异常!", errStr); return; } }
被调用到的方法
[Description("43112")] public void ReceiveBdGztzJqList(string buf) { }