zoukankan      html  css  js  c++  java
  • 利用特性区分查找方法,并通过反射调用方法

    如示例代码,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)
            {
                
            }
  • 相关阅读:
    【leetcode】Spiral Matrix
    【leetcode】Permutations
    【leetcode】Search Insert Position
    【leetcode】Search for a Range
    文件名对目标文件夹可能过长
    协同过滤和简单SVD优化
    奇异值分解(SVD)和简单图像压缩
    PCA数据降维
    FP-growth高效频繁项集发现
    关联挖掘和Aprioir算法
  • 原文地址:https://www.cnblogs.com/KQNLL/p/9275299.html
Copyright © 2011-2022 走看看