定义和执行动态方法

时间:2011-01-19 08:09:56

标签: c#

private ComplexAdvertismentsQuery QueryForm1(string searchQuery)
private ComplexAdvertismentsQuery QueryForm2(string searchQuery)
private ComplexAdvertismentsQuery QueryForm3(string searchQuery)
private ComplexAdvertismentsQuery QueryForm4(string searchQuery)
...

然后我检查

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

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

我可以让这个动态吗?

我看这里http://msdn.microsoft.com/en-us/library/exczf7b9.aspx并尝试使用Type,但这不是类,它是jut方法。

1 个答案:

答案 0 :(得分:1)

您可以使用一系列强类型委托来执行此操作,并对其进行迭代以执行所有方法。

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
  }
}

如果需要,您可以使用反射填充列表并为每个列表获取相应的委托,并只支付一次反映的费用。

此方法的缺点是您的所有方法必须具有相同的原型(此处为ComplexAdvertismentsQuery method(string))。