Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-创建一个重载方法,其中一个int使用固定值,另一个接收值_C#_Methods - Fatal编程技术网

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

C#-创建一个重载方法,其中一个int使用固定值,另一个接收值,c#,methods,C#,Methods,我试图将重载方法的值设置为1,但我希望原始方法保持未初始化状态 public void Method1(string string1, decimal decimal1, int int1) { } public void Method1(string string1, decimal decimal1, int int1 = 1) { } 我得到以下错误: > Error 2 Type 'Application1.Application' already defines

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

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

public void Method1(string string1, decimal decimal1, int int1 = 1)
{
}
我得到以下错误:

>  Error    2   Type 'Application1.Application' already defines a member called 'Method1' with the same parameter types
它似乎不喜欢
int int1=1
。我希望
int1
在该方法的第二个版本中始终等于1,但在第一个版本中,我希望它接收用户输入的值,因此目前尚未初始化


很抱歉,如果以前有人问过这个问题,但是经过一个小时的搜索,我没有找到关于我要找的内容的结果。如果我在这里遗漏了什么,请让我知道,我将尝试提供更好的描述或进一步的详细信息。

只需将参数从您想要的固定值中去掉,并在方法体中初始化变量:

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

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

问题是有两个方法具有相同的签名。对此最简单的修复方法是从第二个重载中删除最后一个参数,并使用硬编码值为最后一个参数调用第一个重载:

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);
}
(如果您的两个方法不能达到相同的结果,那么您应该首先为它们指定不同的名称。)

如果要改用可选参数,只需使用一种方法即可:


抱歉,我认为我在OP中不够清楚。如果用户没有为第一个输入值,则将使用该方法的第二个版本,否则用户将提供一个值。谢谢你的帮助@月亮企鹅:我恐怕还不清楚你的意思。基本上,您需要选择是否需要两个重载—如果需要,则必须为它们提供不同的签名。可选参数是在c#4.0中引入的,请在使用可选参数之前检查您的c#版本。@Nitin:考虑到在针对早期版本的.NET时,您仍然可以使用它,我不认为这是个问题。我怀疑很多人还在使用VS2008。。。这个问题已经包含了一个可选参数,所以大概OP是可以的。我承认,谢谢Jon:)
public void Method1(string string1, decimal decimal1, int int1 = 1)
{
    // Whatever...
}

// Look ma, no second overload