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)
            {
                
            }
  • 相关阅读:
    LeetCode15 3Sum
    LeetCode10 Regular Expression Matching
    LeetCode20 Valid Parentheses
    LeetCode21 Merge Two Sorted Lists
    LeetCode13 Roman to Integer
    LeetCode12 Integer to Roman
    LeetCode11 Container With Most Water
    LeetCode19 Remove Nth Node From End of List
    LeetCode14 Longest Common Prefix
    LeetCode9 Palindrome Number
  • 原文地址:https://www.cnblogs.com/KQNLL/p/9275299.html
Copyright © 2011-2022 走看看