情况: 目前,我正在阅读特定类中带有反射的所有可用函数和方法。类中的所有函数都有一个像这样的属性部分
[ImportFunctionAttribute("myFunction1", 1, ImportAttribute.SourceType.Type1)]
public ImportStatusDetails myFunction1()
{
}
[ImportFunctionAttribute("myFunction2", 2, ImportAttribute.SourceType.Type2)]
public ImportStatusDetails myFunction2()
{
}
要获取给定类中的所有方法,我使用此代码
// 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; } }
}
提前致谢。
答案 0 :(得分:0)
我相信你正在寻找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]);
}
}