GetMethods 与 GetCustomAttributes

GetMethods with GetCustomAttributes

情况: 目前我正在阅读来自特定 class 的所有可用函数和方法。 class 中的所有函数都有一个像这样的属性部分

[ImportFunctionAttribute("myFunction1", 1, ImportAttribute.SourceType.Type1)]
public ImportStatusDetails myFunction1()
{
}

[ImportFunctionAttribute("myFunction2", 2, ImportAttribute.SourceType.Type2)]
public ImportStatusDetails myFunction2()
{
}

要获取给定 class 中的所有方法,我使用此代码

// get the public methods out of import class order by class name
var importMethods = (typeof (Import)).GetMethods(
                BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);

问题: 使用 GetMethods-Method 将为我提供这两个功能 - 但我只想获取类型 ImportAttribute.SourceType.Type2.

的方法

问题: 是否可以限制给定 CustomAttributes 的 GetMethods-Method 结果,例如 GetMethods(...).Where() ??我应该怎么做才能解决这个问题?

加法 1

public class ImportFunctionAttribute : Attribute
    {
        public enum SourceType
        {
            Unknown = 0,
            Type1 = 1,
            Type2 = 2
        }

        public ImportFunctionAttribute(string psTabName, int pnTabId, SourceType pSourceType)
        {
            tabName = psTabName;
            tabId = pnTabId;
            source = pSourceType;
        }
        protected string tabName;
        protected int tabId;
        protected SourceType source;
        public string TabName { get { return tabName; } }
        public int TabId { get { return tabId; } }
        public SourceType Source { get { return source; } }
    }

提前致谢。

我相信您正在寻找 GetCustomAttributes(...)。

var methods = new List<MethodInfo>();
var importMethods = (typeof (Import)).GetMethods(
            BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly));

for (var i = 0; i < importMethods.Length; i++) 
{
    var attr = importMethods[i].GetCustomAttributes(typeof(ImportFunctionAttribute), false).Cast<ImportFunctionAttribute>();
    if (attr.Source == SourceType.Type2)
    {
        methods.Add(importMethods[i]);
    }
}