按名称C#默认参数是否可以?

时间:2017-02-17 11:54:09

标签: c# default-parameters

可能这是一个愚蠢的问题但是: 我想知道是否有类似默认参数的东西但不是按值 - 而是按名称。

示例:

我必须在很多方法中使用参数“IWebDriver driver”。我知道,当我使用它时,我将使用名称“驱动程序” - 名称后面的“对象”可能不同(IE,FF,Chrome ..)但名称将始终相同。

这可能有一个功能

public void CheckName(string nameToCheck, string expectedValue, IWebDriver driver = driver with name "driver")  
{
   some code....
}

当我使用它时不要这样做:

CheckName("MyName", "MyName", driver)  

但要做:

CheckName("MyName", "MyName")

...并且该方法知道必须获取具有名称(字符串)“driver”的对象。

如果我想使用除默认名称之外的其他名称来指定它:

CheckName("MyName", "MyName", driverOtherName)

1 个答案:

答案 0 :(得分:2)

不,没有办法做到这一点。默认参数必须具有常量值 - 它们不能取决于从局部变量中获取的值。

听起来你应该构建一个在字段中存储驱动程序引用的实例,然后你可以只调用该实例上的方法,它可以使用字段中的值:

public class FooChecker
{
    private readonly IWebDriver driver;

    public FooChecker(IWebDriver driver)
    {
        this.driver = driver;
    }

    public void CheckName(string nameToCheck, string expectedValue)
    {
        // Use driver here
    }
}

然后你可以使用:

var checker = new FooChecker(driver);
checker.CheckName("MyName", "MyName");
checker.CheckName("MyName2", "MyName2");