可変長引数を理解しよう!

[C#] 可変長引数を理解しよう!

※ 当サイトは広告を含みます。

ここではC#の可変長引数について学びます。
これはメソッド(関数)で利用する知識で、名前付き引数とか省略可能な引数と同じような話です。

paramsキーワード

可変長引数はparamsキーワードを利用して記述します。

paramsとはparametersの略語です。つまり、複数のパラメーター(引数)を意味します。
そして、paramsキーワードが付いた引数は可変長となり、任意の個数を指定できる引数になります。

以下がサンプルコードです。


namespace Sample
{
  internal class Display
  {
    public void Output(params string[] names)
    {
      // 単なる配列として利用できる
      foreach (var name in names)
        Console.WriteLine($"名前={name}");
    }
  }

  internal class Program
  {
    static void Main(string[] args)
    {
      var d = new Display();

      // '可変長引数' で呼び出し
      d.Output("ロロナ", "トトリ", "メルル", "ルルア");
    }
  }
}

構文は以下です。


アクセス修飾子 戻り型 メソッド名(params 配列型 引数名)

重要なのはparamsキーワードと、それを指定した引数が配列型な部分です。
こうやって記述すると、引数的には配列なのに、メソッドの呼び出し時に配列を作る必要がなくなります。


// '可変長引数' で呼び出し
d.Output("ロロナ", "トトリ", "メルル", "ルルア");

つまりは要素数が可変な引数を受け取る配列を作ってるだけです。
なので、引数に指定した値はメソッド内では単なる配列として扱われます。


foreach (var name in names)
  Console.WriteLine($"名前={name}");

なお、配列でメソッドを呼び出すこともできれば、個数0で呼ぶこともできます。


namespace Sample
{
  internal class Display
  {
    public void Output(params string[] names)
    {
      foreach (var name in names)
        Console.WriteLine($"名前={name}");
    }
  }

  internal class Program
  {
    static void Main(string[] args)
    {
      var d = new Display();

      // 0個の指定
      d.Output();

      // 配列で指定
      d.Output(new string[] { "ロロナ", "トトリ", "メルル", "ルルア" });
    }
  }
}

注意として、仕組みの都合で最後の引数にしかparamsを付けることはできません。
これは当たり前ですが、そうしないと配列の終わりが判断できないからです。
後、型が違うからと言って複数のparams引数を作ることも不可能です。

あとがき

あんまり自分で作ることはないのですが、.NET内のライブラリが可変長引数ってことはよくあります。

◆ C#に関する学習コンテンツ

この記事は参考になりましたか?

関連記事

コメント

この記事へのコメントはありません。