パープルハット

※当サイトではGoogleアドセンス広告を利用しています

C# params(可変長引数)の使い方




paramsの使用の有無によるプログラムの違い

使わない場合

引数のint型配列の平均値を求める関数Aveがあるとする。通常だとこの関数を呼び出すためには

 int[] arr = new int[] { 1, 7, 8, 2 };

としてからarrを引数として渡すというようにする必要があり、少々面倒。

サンプルコード

using System;

public class Sample
{
    static double Ave(int[] arr)
    {
        int sum = 0;
        for (int i = 0; i < arr.Length; i++)
        {
            sum += arr[i];
        }
        return (double)sum / arr.Length;
    }
    static void Main()
    {
        int[] arr = new int[] { 1, 7, 8, 2 };
        Console.WriteLine(Ave(arr));
    }
}


実行結果

4.5



使用した場合

可変長引数paramsを利用するとわざわざ配列を作成せずとも

Ave(1, 7, 8, 2)

というようにカンマで並べるだけで関数内で配列として扱える。

サンプルコード(実行結果は同じなので省略)

using System;

public class Sample
{
    static double Ave(params int[] arr)
    {
        int sum = 0;
        for (int i = 0; i < arr.Length; i++)
        {
            sum += arr[i];
        }
        return (double)sum / arr.Length;
    }
    static void Main()
    {
        //引数を配列に代入する手間を減らすことができる
        Console.WriteLine(Ave(1, 7, 8, 2));
    }
}




使用上の注意

paramsを用いた引数は最後にする必要がある

OK例

static double Ave(string str, params int[] arr)


NG例

static double Ave(params int[] arr, string str)




使用例(配列の和を求める)

using System;

public class Sample
{
    static int Sum(params int[] arr)
    {
        int sum = 0;
        for (int i = 0; i < arr.Length; i++)
        {
            sum += arr[i];
        }
        return sum;
    }
    static void Main()
    {
        Console.WriteLine(Sum(1, 7, 8, 2, 3, 5, 6, 9, 4));
    }
}


実行結果

45