【问题标题】:c# Conditional object declaration [duplicate]c#条件对象声明[重复]
【发布时间】:2018-06-17 05:36:01
【问题描述】:

我想根据变量值声明一个对象。

这是我尝试运行但无法编译的代码:

if (bcheck == 0)
    IWebDriver driver = new ChromeDriver();
else if (bcheck == 1)
    IWebDriver driver = new FirefoxDriver();
else if (bcheck == 2)
    IWebDriver driver = new InternetExplorerDriver();

如果我尝试编译代码,我会收到以下错误消息:

内嵌语句不能是声明或带标签的语句

如何重写代码?

驱动程序对象在下面的代码中使用,我必须保留该名称以免更改程序流程。

【问题讨论】:

  • 事先声明driver(没有值)并在每个条件中分配给它。
  • 我会使用Dictionary,类似stackoverflow.com/a/42505360/2946329
  • 具有讽刺意味的是,没有一个答案可以解释给出的实际错误,即缺少花括号。
  • if-statement 是一个定义范围的块结构,变量的范围决定了它对程序其余部分的可见性。所以如果你没有在if-statement 之前声明变量,你就不能在外面访问它。错误消息本身具有误导性,因为它告诉您如果要使用声明,则应在 if 内使用 {} 而不是嵌入语句(一个衬里)。但是,如果您这样做,您仍然无法访问上面提到的 if 之外的变量。

标签: c# .net compiler-errors


【解决方案1】:
IWebDriver driver = null;
if (bcheck == 0)
    driver = new ChromeDriver();
else if (bcheck == 1)
    driver = new FirefoxDriver();
else if (bcheck == 2)
    driver = new InternetExplorerDriver();

在if 条件外声明IWebDriver,在if 条件内进行赋值。

【讨论】:

  • 我通常不使用null 进行初始化,因为您可能找不到未设置变量的极端情况。
【解决方案2】:

不要使用if / else,字典更简单,扩展性更好。

var dictionary = new Dictionary<int, IWebDriver>
{
    [0] = new ChromeDriver(),
    [1] = new FirefoxDriver(),
    [2] = new InternetExplorerDriver()
};

var driver = dictionary[bcheck];

【讨论】:

    【解决方案3】:

    你必须声明一个变量:

    IWebDriver driver = null;
    if (bcheck == 0)
       driver = new ChromeDriver();
    else if (bcheck == 1)
       driver = new FirefoxDriver();
    else if (bcheck == 2)
       driver = new InternetExplorerDriver();
    

    【讨论】:

    • 我通常不使用null 进行初始化,因为您可能找不到未设置变量的极端情况。
    【解决方案4】:

    您可以在 if-else 语句之前声明driver,但只能在相关条件内初始化:

    IWebDriver driver = null;
    if (bcheck == 0)
        driver = new ChromeDriver();
    else if (bcheck == 1)
        driver = new FirefoxDriver();
    else if (bcheck == 2)
        driver = new InternetExplorerDriver();
    

    【讨论】:

    • 我通常不使用null 进行初始化,因为您可能找不到未设置变量的极端情况。
    猜你喜欢
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2023-04-06
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多