默认属性值

问题描述:

我有一个方法:默认属性值

public void MyMethod(string myParam1,string myParam2="") 
{ 
    myParam2 = (myParam2 == "")?myParam1:myParam2; 
} 

有没有办法做到这一点是这样的:

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

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

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

我相信你没有机会试着去尝试。

如果你想这样做,最好的选择看起来像method overloading

重载分辨率是用于选择最好的 函数成员调用给定的参数列表和一组 候选函数成员一个编译时机构

不是直接的,作为缺省值必须在是已知的编译时间。你描述的第一种方法是正确的方法。

但是,你可以做到:

  1. 设置的空默认,当你使用它凝聚它:

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

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