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]);
}
}
情况: 目前我正在阅读来自特定 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]);
}
}