我试图编写一个linq语句,它将扫描整个执行程序集,查找具有特定属性和特定属性属性值的方法。
这是我的属性......
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = true)]
public class ScenarioSetup : Attribute
{
public string ScenarioTitle { get; set; }
public bool ActiveForBuild { get; set; }
}
这是一个使用它的方法的例子......
[ScenarioSetup(ScenarioTitle = "R/S/T [Assessor Management] ASM.08 - Activate Assessor", ActiveForBuild = true)]
public void CreateInactiveAssessor()
{
var assessor = ApiHelper.PostRequest(AssessorFactory.CreateAssessorApi("Woodwork"), Client, false);
AddStateItem(assessor, StateItemTag.AssessorEntity);
}
因此,使用上面的示例,我想使用反射来查找具有[ScenarioSetup]
属性的方法,然后检查属性ScenarioTitle
是否等于某个值(在这种情况下' R / S / T [评估员管理] ASM.08 - 激活评估员')
这就是我到目前为止......
var methodz = Assembly.GetExecutingAssembly().GetTypes()
.SelectMany(t => t.GetMethods())
.Where(m => m.GetCustomAttributes(typeof(ScenarioSetup), false).Length > 0);
然后我迷路了,试图进行ScenarioTitle
检查。
有人可以帮忙吗?
答案 0 :(得分:1)
您可以尝试:
var methodz = Assembly.GetExecutingAssembly().GetTypes()
.SelectMany(t => t.GetMethods())
.Where(m => m.GetCustomAttributes(typeof(ScenarioSetupAttribute), false)
.Cast<ScenarioSetupAttribute>().Where(a=>a.ScenarioTitle=="R/S/T [Assessor Management] ASM.08 - Activate Assessor").Length > 0);
答案 1 :(得分:1)
另一种方式是:
`
var methods = Assembly.GetExecutingAssembly()
.GetTypes()
.SelectMany(t => t.GetMethods())
.Where(m => m.GetCustomAttributes<ScenarioSetupAttribute>().Any())
.Where(x=>x.GetCustomAttribute<ScenarioSetupAttribute>().ScenarioTitle=="R/S/T [Assessor Management] ASM.08 - Activate Assessor");`