C# - 创建一个重载方法,其中一个int使用固定值而另一个int接收值

0 c# methods

我试图将重载方法的值设置为1,但我希望原始文件保持未初始化状态.

public void Method1(string string1, decimal decimal1, int int1)
{
}

public void Method1(string string1, decimal decimal1, int int1 = 1)
{
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

>  Error    2   Type 'Application1.Application' already defines a member called 'Method1' with the same parameter types
Run Code Online (Sandbox Code Playgroud)

它似乎不喜欢int int1 = 1.我想int1在方法的第二个版本中始终等于1,但在第一个版本中我希望它接收用户输入的值,因此现在是未初始化的.

很抱歉,如果之前已经询问过,但经过一个小时的搜索后,我发现没有找到我想要的结果.如果我在这里遗漏任何东西,请告诉我,我会尝试提供更好的描述或更多细节.

Jon*_*eet 11

问题是你有两个具有相同签名的方法.最简单的解决方法是从第二个重载中删除最后一个参数,然后用最后一个参数的硬编码值调用第一个重载:

public void Method1(string string1, decimal decimal1, int int1)
{
    // Whatever you actually want to do here
}

public void Method1(string string1, decimal decimal1)
{
    Method1(string1, decimal1, 1);
}
Run Code Online (Sandbox Code Playgroud)

(如果你的两个方法不能达到相同的结果,你应该给它们不同的名称开始.)

如果您想使用可选参数,只需使用一个方法即可:

public void Method1(string string1, decimal decimal1, int int1 = 1)
{
    // Whatever...
}

// Look ma, no second overload
Run Code Online (Sandbox Code Playgroud)


Dav*_*ych 7

只需将参数从您想要固定值的重载中移除,并在方法体内初始化变量:

public void Method1(string string1, decimal decimal1, int int1)
{
}

public void Method1(string string1, decimal decimal1)
{
     int int1 = 1;
     //Do things
}
Run Code Online (Sandbox Code Playgroud)