利用特性区分查找方法,并通过反射调用方法

如示例代码,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}
类名:{0} 函数:{1} 错误描述:{2}", this.GetType().Name, methodName, ex.Message, ex.Source);
LogService.Instance.Fatal("执行函数异常!", errStr);
return;
}

}

被调用到的方法

  [Description("43112")]
        public void ReceiveBdGztzJqList(string buf)
        {
            
        }
原文地址:https://www.cnblogs.com/KQNLL/p/9275299.html