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)); } }
使用した場合
可変長引数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)); } }
実行結果
4.5
使用上の注意
paramsを用いた引数は最後にする必要がある
例えば、
static double Ave(string str, params int[] arr)
とするのは問題ないが、
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