Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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# 方法可选属性的默认值_C# - Fatal编程技术网

C# 方法可选属性的默认值

C# 方法可选属性的默认值,c#,C#,我有一个方法: public void MyMethod(string myParam1,string myParam2="") { myParam2 = (myParam2 == "")?myParam1:myParam2; } 有没有办法做到这一点,比如: public void MyMethod(string myParam1,string myParam2 = (myParam2 == "")?myParam1:myParam2) 否。 参数的默认值需要在编译时知道。您提供

我有一个方法:

public void MyMethod(string myParam1,string myParam2="")
{
     myParam2 = (myParam2 == "")?myParam1:myParam2;
}
有没有办法做到这一点,比如:

public void MyMethod(string myParam1,string myParam2 = (myParam2 == "")?myParam1:myParam2)
否。


参数的默认值需要在编译时知道。您提供的第一个代码段是正确的方法。或者正如其他答案所指出的,提供一个只接受单个参数的重载方法。

为了执行您想要的操作,您需要使用重载而不是可选参数。

我不可能相信您所尝试的

如果您想这样做,最好的选项是

重载解析是一种编译时机制,用于选择最佳 给定参数列表和一组 候选职能成员


不直接,因为默认值必须在编译时已知。您描述的第一种方法是正确的方法

但是,您可以:

  • 将默认值设置为null,并在使用时合并:

    public void MyMethod(string myParam1, string myParam2 = null)
    {
        Console.WriteLine(myParam2 ?? myParam1);
    }
    
  • 使用重载:

    public void MyMethod(string myParam1, string myParam2)
    {
        Console.WriteLine(myParam2);
    }
    
    public void MyMethod(string myParam1)
    {
        MyMethod(myParam1, myParam1);
    }