2016-08-04 31 views
1

我想開始新的瀏覽器Chrome進程。如何在C#中使用關鍵字`var`和Class#

在類ChromeDriver有一個方法來做到這一點。

並試圖初始化ChromeDriver這樣的:

ChromeDriver browser; 
private void OpenBrowser() 
{ 
    browser = new ChromeDriver(Browsers.Chrome); 
} 

問題是:

我開始ň過程chrome瀏覽器,它只能運行一個瀏覽器,另一個進程不是我的代碼運行(儘管它初始化)。

所以,我試圖改變代碼:

private void OpenBrowser() 
{ 
    var browser = new ChromeDriver(Browsers.Chrome); 
} 

它的工作,但另一種方法是使用瀏覽器。但我不能用方法聲明var browser

它會返回錯誤,如:

上下文關鍵字「變種」只能出現在局部變量聲明中或腳本代碼

更新時間:

我看到所有的答案並知道varChromeDriver在我的情況。

但是什麼時候運行它,有問題。

我會介紹更多信息。

假設我需要啓動2個Chrome進程。初始化經過兩次鍍鉻過程中,我會去到網址:

browser.GoToUrl(link);

所以,我就知道它的工作或不工作。

首先,使用ChromeDriver的情況下,它仍然會打開2個Chrome進程,但它只與第二個進程一起工作,第一個進程無法工作。

第二,使用var關鍵字的情況下,它打開2個Chrome進程,並且它也使用兩個進程。

+2

所有這一切'變種'does是允許你省略*指定*變量的類型。如果你在'OpenBrowser'內部編寫了'ChromeDriver browser = new ChromeDriver(Browsers.Chrome);'(這也將'browser'從一個字段改變爲一個局部變量),就完全一樣了。無論你的問題是什麼,它的代碼範圍都比這幾個代碼片段要寬。 –

+1

爲什麼不簡單地從'OpenBrowser()'方法返回'ChromeDriver'(而不是'void')? – Filburt

+0

@Filburt,有更多的代碼,我知道'var browser'是'ChromeDriver瀏覽器'。但我不知道它不工作。如果我嘗試使用'var',它工作。 – vanloc

回答

1

var是一個關鍵字,只能在方法的範圍內使用。在類的範圍內使用它會引發錯誤。

如果你可以在方法外部使用它,結果將與你的第一個例子相同,因爲它所做的只是推斷類型,這意味着它將與將其聲明爲ChromeDriver相同。

+0

我知道。似乎有我的課程'ChromeDriver'的問題。 – vanloc

3

我不是你正在嘗試做明確的100%,但我可以回答了一個問題,問道:

var只是語法糖,省去寫類型的全名。從錯誤中可以看出,它只能用於局部變量。

這意思是,下面的兩行是等效的:

ChromeDriver browser = new ChromeDriver(Browsers.Chrome); 
var browser = new ChromeDriver(Browsers.Chrome); 

當編譯的編譯器將看到瀏覽器被設置爲類型ChromeDriver的對象,並因此充當如果它被聲明爲ChromeDriver 。

這樣做的主要優點與醜陋長變量名的工作是當(通常使用泛型)如:

Dictionary<string, Dictionary<int, List<double>> myObject = new Dictionary<string, Dictionary<int, List<double>>(); 

這可以更可讀地寫爲:

var myObject = new Dictionary<string, Dictionary<int, List<double>>(); 

作爲附加請注意,它可能隱含在我所說的內容中,但要明確您需要使用var。你不能例如做:

var myObject; 

因爲編譯器會抱怨它不能工作的myObject類型(這是很明顯的看這行代碼!)。

+0

你能看到我的問題已更新嗎?就像你說的,一個問題可能出現在'ChromeDriver'類。所以,我添加了更多的代碼。 – vanloc

1

如何從方法返回參考?

private ChromeDriver OpenBrowser() 
{ 
    return new ChromeDriver(Browsers.Chrome); 
} 

另外,根據exampleChromeDriver類實現IWebDriver接口,所以最好是這樣寫:

private IWebDriver OpenChromeBrowser() 
{ 
    return new ChromeDriver(Browsers.Chrome); 
} 

在您的另一種方法(在同一個班級,病程你的方法是private),可以使用它是這樣的:

var driver = OpenChromeBrowser(); 
+0

當我使用'driver'時,我必須初始化?在其他類中,我也使用'driver'變量。您的方法中的變量'driver',而不是全局變量。 – vanloc

1

在聲明VAR變量.net需要知道什麼樣的var您正在聲明,因此您可以使用var,如果您在另一端有var您正在聲明的類型。

var cool = new MySuperBrowserClass(); 
var lol = 69; 

在兩種情況下達網絡知道在另一側上有一類型MySuperBrowserClass或只是一個int。換句話說:如果你想聲明一個var,不管上下文如何,你必須澄清它的類型。

也許(也許不是因爲其他原因的情況下!),你可以在你的第一個代碼示例在改變,你必須:

ChromeBrowser browser; 

做這樣的事情:

var browser = new ChromeDriver(Browsers.Chrome);