C#默认参数名称这可能吗?

C#默认参数名称这可能吗?,c#,default-parameters,C#,Default Parameters,也许这是个愚蠢的问题,但是: 我想知道是否有类似默认参数的东西,但不是按值而是按名称 例如: 我必须在很多方法中使用参数“IWebDriver”。我知道,当我使用它时,我总是会使用“驱动程序”这个名字——名字后面的“对象”可以不同(例如,FF,Chrome…),但名字总是一样的 那么这有可能有一个函数吗 public void CheckName(string nameToCheck, string expectedValue, IWebDriver driver = driver with n

也许这是个愚蠢的问题,但是: 我想知道是否有类似默认参数的东西,但不是按值而是按名称

例如:

我必须在很多方法中使用参数“IWebDriver”。我知道,当我使用它时,我总是会使用“驱动程序”这个名字——名字后面的“对象”可以不同(例如,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)

不,没有办法。默认参数必须具有常量值-它们不能依赖于从局部变量获取的值

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

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");

不,没有办法。默认参数必须具有常量值-它们不能依赖于从局部变量获取的值

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

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");


添加一堆重载?如果不想显式传递驱动程序对象,该方法将从何处获取驱动程序对象?您能提供更多信息吗?如果我正确理解您的问题,您希望检查存储(可选)参数值的变量的名称。不,这是不可能的。变量名(应该)对你的代码绝对没有意义,它们可以是任何东西。是的,这就是我想做的。。。我知道我可以用任何东西来表示变量的名称,但这是不可能的。???现在写我必须写在每个方法参数(WebDriver)中,我知道每次驱动程序的名称都是“driver”。如果这是可能的,我的方法将看起来很清楚-现在我看到驱动程序的字每一个地方。。。。我看到,如果我能显示一些,它会更好…像默认参数的名字。。。如果没有这样的名字,我们会像往常一样看到错误,如果我们输入之前没有声明的名字…@Chetan Ranpariya:我想传递它。我会通过的。但是我知道每次我的对象的名称都是“driver”,我不想每次都写这个。如果可以创建类似以下内容的方法:public void CheckName(string name-tocheck,string-expectedValue,IWebDriver-driver=Object.WithName[“driver”])-类似这样的内容。如果没有这样的对象只是为了看到一个错误…添加一堆重载?如果不想显式地传递它,该方法将从哪里获取驱动程序对象?您能提供更多信息吗?如果我正确理解您的问题,您希望检查存储(可选)参数值的变量的名称。不,这是不可能的。变量名(应该)对你的代码绝对没有意义,它们可以是任何东西。是的,这就是我想做的。。。我知道我可以用任何东西来表示变量的名称,但这是不可能的。???现在写我必须写在每个方法参数(WebDriver)中,我知道每次驱动程序的名称都是“driver”。如果这是可能的,我的方法将看起来很清楚-现在我看到驱动程序的字每一个地方。。。。我看到,如果我能显示一些,它会更好…像默认参数的名字。。。如果没有这样的名字,我们会像往常一样看到错误,如果我们输入之前没有声明的名字…@Chetan Ranpariya:我想传递它。我会通过的。但是我知道每次我的对象的名称都是“driver”,我不想每次都写这个。如果可以创建类似以下内容的方法:public void CheckName(string name-tocheck,string-expectedValue,IWebDriver-driver=Object.WithName[“driver”])-类似这样的内容。如果没有这样的对象只是为了看到一个错误……那么,您可以很容易地使用
null
作为默认参数,比如
driver=driver??方法中的myLocalVariable
。但我假设这不是OPs问题。@lukegv这就是Jon所说的常量值。如果我想让一个类FooChecker(驱动程序)成为名为Test的nuget包的一部分,好吗?这是否可以写“使用Test.FooChecker(驱动程序)”呢?@Stanislava:Only
FooChecker
是类-您需要在代码中构造该类的实例-您描述的using指令完全是伪造语法。好的,所以我不能在nuget包中添加FooChecker。如果我希望它在nuget包中,我必须传递类似于驱动程序的参数…这是我的问题…我想要不要每次都在我的方法中写入单词“driver”,如果可以使用默认参数之类的名称跳过它,那就太好了。但现在我发现这是不可能的:(好的,您可以很容易地使用
null
作为默认参数,并在方法中使用类似于
driver=driver??myLocalVariable
的内容。但我假设这不是OPs问题。@lukegv Jon所说的常量值就是这个意思。如果我想让一个类FooChecker(驱动程序)成为名为Test的nuget包的一部分,可以这样写吗?“使用Test.FooChecker(驱动程序)?@Stanislava:Only
FooChecker
是类-您需要在代码中构造该类的实例-您描述的using指令完全是伪造语法。好的,所以我不能在nuget包中添加FooChecker。如果我希望它在nuget包中,我必须传递类似于驱动程序的参数…这是我的问题…我想要不要每次都在我的方法中写“driver”这个词,如果可以用默认参数之类的名字跳过它,那就太好了