2017-10-14 69 views
0

我想在我的列表中的每個實例上運行一個方法,但是當我嘗試使用「.foreach()」方法來實現時, m到處錯誤C#無法從'字符串'轉換爲'System.Action <string>'

「無法從 '字符串' 到 'System.Action' 轉換」

我的方法,我試圖打電話給

public static string CheckSerial(List <string> serial, IWebDriver Driver) 
{ 
    Driver.Navigate().GoToUrl("http://www.dell.com/support/home/uk/en/ukdhs1/product-support/servicetag/" + serial); 
    return Driver.Title; 
} 

我的主要方法

static void Main(string[] args) 
{  
    IWebDriver driver = new FirefoxDriver(); 

    List<string> serials = new List<string> 
    { 
     "JPV6Q12", 
     "JPV7Q12" 
    }; 
    serials.ForEach(CheckSerial(serials, driver)); 
}; 

謝謝大家提前就這一個, 問候任何幫助,

回答

1

List<string>.ForEach期待作爲參數Action<string>但這並不是你所傳遞。

你應該打電話這樣說:

public static string CheckSerial(string serial, IWebDriver Driver) 
{ 
    Driver.Navigate().GoToUrl("http://www.dell.com/support/home/uk/en/ukdhs1/product-support/servicetag/" + serial); 
    return Driver.Title; 
} 

serials.ForEach(s => CheckSerial(s, driver)); 

,但在我看來奇怪的是,不管你做什麼用的返回值。如果你想用它和GoToUrl不會在URL無效時拋出一個異常,那麼你可以:

var result = serials.Select(s => new { Serial = s, Title = CheckSerial(s, driver) }); 

如果你想使ForEach最初的工作方式與您如何那麼你可以使CheckSerial擴展方法和:

public static void CheckSerial(this IWebDriver Driver, string serial) { ... } 
serials.ForEach(driver.CheckSerial); 
+0

啊,是的。忘了補充一點,我將在列表中存儲來自調用方法的結果,所以我已經獲得了每個我擁有的序列的每個Web標題的列表。修復我的代碼後,它就像一個魅力,我明白我做錯了什麼。謝謝你的幫助,吉拉德! –

+0

@GeneParmesan - 不客氣:)很高興幫助。 –

相關問題