2015-10-13 47 views
1

我有一個通用的方法。基本上我想使用該方法搜索頁面上的元素並相應地返回一些不同的PageObject。查找頁面控件的通用方法不能編譯

public T NavigateToTab<T>(string tabName) 
{ 
    AdminConsole result = SelectOnNavElement(tabName); 
    return new T(result); 
} 

Hovewer,它不編譯。爲什麼?

+0

'新款T (result)'在語法上不是有效的。爲'Func '添加一個參數來構造返回值。 – Lee

回答

2

但是,它不能編譯。爲什麼?

因爲T是一個泛型類型,而編譯器不能保證任何T將有一個構造函數服用AdminConsole作爲參數(因爲有沒有這樣的限制)。

一種方式是一個valueFactory委託傳遞給您的方法,它可以生成正確的T值給出一個AdminConsole實例:

public T NavigateToTab<T>(string tabName, Func<AdminConsole, T> valueFactory) 
{ 
    AdminConsole result = SelectOnNavElement(tabName); 
    return valueFactory(result); 
} 

和使用它像這樣:

void Main() 
{ 
    Func<AdminConsole, AwesomeClass> classCreator = adminConsole => 
                 new AwesomeClass(adminConsole); 
    var result = NavigateToTab("tab", classCreator); 
} 
相關問題