4

私は方法を持っています:

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

これを次のようにする方法はありますか:

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

4 に答える 4

6

いいえ。

パラメータのデフォルト値は、コンパイル時にわかっている必要があります。あなたが提供した最初のスニペットは、これを行う正しい方法です。または、他の回答で指摘されているように、単一のパラメーターのみを受け入れるオーバーロード メソッドを提供します。

于 2013-02-28T15:15:43.540 に答える
3

必要なことを実行するには、オプションのパラメーターの代わりにオーバーロードを使用する必要があります。

于 2013-02-28T15:16:11.493 に答える
2

あなたがしようとしたことを私が信じる可能性はありません。

このような処理をしたい場合、最適なオプションはメソッドのオーバーロードのようになります。

オーバーロードの解決は、引数リストと一連の候補関数メンバーを指定して、呼び出すのに最適な関数メンバーを選択するためのコンパイル時のメカニズムです。

于 2013-02-28T15:18:37.500 に答える
2

コンパイル時にデフォルト値を知る必要があるため、直接ではありません。あなたが説明する最初の方法は、これを行う正しい方法です。

ただし、次のことができます。

  1. デフォルトを null に設定し、使用するときに結合します。

    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);
    }
    
于 2013-02-28T15:20:27.137 に答える