私は方法を持っています:
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);
}