C# 定义并执行动态方法

C# 定义并执行动态方法,c#,C#,然后我检查一下 private ComplexAdvertismentsQuery QueryForm1(string searchQuery) private ComplexAdvertismentsQuery QueryForm2(string searchQuery) private ComplexAdvertismentsQuery QueryForm3(string searchQuery) private ComplexAdvertismentsQuery QueryForm4(st

然后我检查一下

private ComplexAdvertismentsQuery QueryForm1(string searchQuery)
private ComplexAdvertismentsQuery QueryForm2(string searchQuery)
private ComplexAdvertismentsQuery QueryForm3(string searchQuery)
private ComplexAdvertismentsQuery QueryForm4(string searchQuery)
...
我能让它充满活力吗


我在这里查看并尝试使用类型,但这不是类,而是jut方法。

您可以使用一个强类型委托数组来实现这一点,并对其进行迭代以执行所有方法

query = QueryForm1(searchQuery);
if (query != null)
{
}

query = QueryForm2(searchQuery);
if (query != null)
{
}
var listofquerys=新列表{
QueryForm1、QueryForm2、QueryForm3、QueryForm4
};
foreach(listOfQueries中的var queryForm){
var query=queryForm(searchQuery);
if(查询!=null){
//做点什么
}
}
如果需要,您可以按使用的反射填充列表,并为每个代理获取相应的代理,并且只需支付一次反射成本


此方法的缺点是所有方法都必须具有相同的原型(
ComplexAdvertismentsQuery方法(string)

动态是什么意思?请澄清。我认为你需要为这个问题添加更多的背景;这里肯定有人可以为您提供
DynamicMethod
示例,但除非问题非常清楚,否则这些示例毫无意义。通过反射调用方法会降低程序的速度。拥有一个
Func
数组并对其进行迭代不是更有用吗?@senzacionale,这里不清楚通过动态调用想要实现什么。也许你应该看看Nekresh建议的方法。我通过这个例子解决了这个问题
var listOfQueries = new List<Func<string, ComplexAdvertismentsQuery>> {
  QueryForm1, QueryForm2, QueryForm3, QueryForm4
};

foreach (var queryForm in listOfQueries) {
  var query = queryForm(searchQuery);

  if (query != null) {
    // do something
  }
}