【C#】可変長引数(paramsキーワード)

可変長引数とは

C#ではparamsキーワードを使用することで、メソッドの引数の数を可変にすることができます。

メソッドの引数を決まった数ではなく、そのメソッドを呼び出す側で好きなだけ追加できるようにしたい時に使用します。

 

paramsキーワードの特徴

paramsキーワードで定義した引数は、下記の3つを渡すことができます。
・引数なし
・空配列
・データが設定された配列

制限として、paramsキーワードはメソッドの最後の引数にしか付加できません。

 

サンプルコード

可変長引数を使用していない場合

using System;

namespace MyPracticeApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 50, b = 20, c = 3, d = 30, e = 60;

            int[] num = new int[] {a, b, c, d, e};

            int max = Max(num);

            Console.WriteLine(max);
        }

        static int Max(int[] num)
        {
            int max = num[0];

            foreach (int i in num)
            {
                if (max < i)
                {
                    max = i;
                }
            }
            return max;
        }
    }
}

実行結果:「60

上記のように、一度値をint配列に格納してからメソッドを呼び出す必要があります。

これを可変長引数を用いることで、配列に格納する処理を省略することができます。

 

可変長引数を使用した場合

using System;

namespace MyPracticeApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 50, b = 20, c = 3, d = 30, e = 60;

       // 自動的に配列を作り格納
            int max = Max(a, b, c, d, e);

            Console.WriteLine(max);
        }

    // 引数にparamsキーワードを使用する
        static int Max(params int[] num)
        {
            int max = num[0];

            foreach (int i in num)
            {
                if (max < i)
                {
                    max = i;
                }
            }
            return max;
        }
    }
}

 

実行結果:「60

このように、paramsキーワードを使うだけで配列を用意して値を格納する作業を省略することができます。

 

可変長引数を引数なしで使用する場合

using System;

namespace MyPracticeApp
{
    class Program
    {
        private void Func(params string[] items)
        {
            if (items.Length == 0)
            {
                Console.WriteLine("空の配列です。");
            }
            else
            {
                foreach (var item in items)
                {
                    Console.WriteLine(item);
                }
            }
        }

        static void Main(string[] args)
        {
            var program = new Program();

          // 引数なしの場合
            program.Func();

          // 引数にデータが格納された配列を指定した場合
            var items1 = new string[] { "red", "blue", "yellow" };
            program.Func(items1);
        }
    }
}

実行結果:
空の配列です。
red
blue
yellow

このように、可変長引数を引数なしで使用することもできます。

 

参考

■公式ドキュメント
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/params

 

おすすめ書籍

■C#を学習し始めた方向け
やさしいC 第3版 (「やさしい」シリーズ)

1週間でCの基礎が学べる本

確かな力が身につくC「超」入門 第2版 (Informatics&IDEA)