如何在C#中使用关键字“var”和Class



我想启动新的浏览器Chrome进程。

在类ChromeDriver中,有一个方法可以做到这一点。

并尝试像这样初始化ChromeDriver

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

问题是:

我启动了n进程浏览器Chrome,它只运行一个浏览器,另一个进程不运行我的代码(尽管它已初始化)。

所以,我尝试更改代码:

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

它起作用了,但另一种方法是使用浏览器。但是我不能从方法中声明var browser

它将返回错误,如:

上下文关键字"var"只能出现在本地变量声明或脚本代码中

更新:

我看到了所有的答案,知道在我的情况下var就是ChromeDriver

但什么时候运行它,就有问题了。

我将描述更多信息。

假设,我需要启动2 Chrome进程。在初始化两个Chrome进程后,我将使用转到URL

browser.GoToUrl(link);

所以,我会知道它是否有效。

起初,在使用ChromeDriver的情况下,它仍然打开2个Chrome进程,但它只与第二个进程一起工作,第一个进程不工作。

其次,在使用var关键字的情况下,它打开了2个Chrome进程,并且还使用了两个进程。

我不是100%清楚你想做什么,但我可以按要求回答问题:

var只是语法糖,可以省去编写类型全名的麻烦。正如您从错误中看到的,它只能与局部变量一起使用。

这意味着以下两条线是等效的:

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

编译时,编译器将看到浏览器被设置为ChromeDriver类型的对象,因此就好像它被声明为ChromeDrive一样。

这样做的主要优点是在处理丑陋的长变量名(通常使用泛型)时,例如:

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的类型(从那行代码中可以明显看出!)。

如何从方法返回引用?

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

此外,根据示例ChromeDriver类实现了IWebDriver接口,因此最好这样写:

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

在您的另一个方法中(在同一类中,因为您的方法是private),您可以这样使用它:

var driver = OpenChromeBrowser();

当您声明一个var变量时,net需要知道您声明的是什么类型的var,所以当您在另一边有您声明的vartype时,您可以使用var

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

在这两种情况下,.net都知道在另一边有一个MySuperBrowserClass类型的类,或者只是一个int.

换句话说:如果你想声明一个var,无论上下文如何,你都必须澄清它的类型。

也许(也许因为其他原因而不是这样!)你可以在你的第一个代码样本中更改:

ChromeBrowser browser;

做一些类似的事情:

var browser = new ChromeDriver(Browsers.Chrome);

var是一个只能在方法范围内使用的关键字。在类的范围内使用它将引发错误。

如果你可以在方法之外使用它,结果将与你的第一个例子相同,因为它所做的只是推断类型,这意味着它将与声明它为ChromeDriver相同。

最新更新