2011-01-19 53 views
0
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,但這不是class它是jut方法。

+0

你是什麼意思的動態?請澄清。 – leppie 2011-01-19 08:20:40

回答

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))。