19

以下にC#メソッドを書く方法はありますか?

public string Download(Encoding contentEncoding = null) {
    defaultEncoding = contentEncoding ?? Encoding.UTF8;
    // codes...
}

デフォルトのパラメータが追加されているため、次のようになります。

public string Download(Encoding contentEncoding = Encoding.UTF8) {
    // codes...
}

コンパイル時定数を使用せずに?

4

3 に答える 3

24

要するに。いいえ。

オプションのパラメーターは、コンパイル時定数または値型である必要があります。

MSDNの名前付きおよびオプションの引数(C#プログラミングガイド)から:

各オプションのパラメーターには、その定義の一部としてデフォルト値があります。そのパラメーターに引数が送信されない場合は、デフォルト値が使用されます。デフォルト値は、次のタイプの式のいずれかである必要があります。

  • 定数式;
  • フォームの式new ValType()。ここで、ValTypeは列挙型や構造体などの値型です。
  • の形式の式。default(ValType)ここValTypeで、は値型です。

あなたが達成したいと思われることは、オーバーロードすることによって達成することができます:

public string Download()
{
   return Download(Encoding.UTF8);
}

public string Download(Encoding contentEncoding)
{
   defaultEncoding = contentEncoding ?? Encoding.UTF8;
   // codes...
}

デフォルト値はオプションのパラメーターを使用して呼び出し元にハードコードされるため、これはオプションのパラメーターとはまったく同じではないことに注意してください(これが、オプションのパラメーターに対する制限が存在する理由です)。

于 2013-02-09T15:10:01.973 に答える
10

オーバーロードを使用します。

public string Download(Encoding contentEncoding)
{
   // codes...
}

public string Download()
{
    return Download(Encoding.UTF8);
}
于 2013-02-09T15:11:10.473 に答える
5
public static string Download(Encoding encoder = null)
{
    if (encoder == null)
        encoder = Encoding.Default


   string returnVal="";
   // do something

    return returnVal;
}
于 2014-11-27T10:06:48.163 に答える