導入
「合計を出す」「メッセージを組み立てる」——渡す引数の個数が決まっていないメソッドを作りたいことがあります。paramsを使うと、呼び出し側は好きな個数の引数をカンマ区切りで渡せ、受け取る側では配列として扱えます。Console.WriteLineやstring.Formatもこの仕組みで作られています。
図解
flowchart LR
C["Sum(1, 2, 3)"] -->|params が束ねる| A["int[] numbers = {1,2,3}"]
C2["Sum(10, 20)"] -->|個数は自由| A2["int[] numbers = {10,20}"]
A --> R["合計 6"]
A2 --> R2["合計 30"]
サンプル
// params: 任意個の引数を配列としてまとめて受け取る
int Sum(params int[] numbers)
{
int total = 0;
foreach (int n in numbers) total += n;
return total;
}
Console.WriteLine(Sum(1, 2, 3)); // 6 ← 個数は自由
Console.WriteLine(Sum(10, 20, 30, 40)); // 100
Console.WriteLine(Sum()); // 0 ← 0個でもOK
// 配列をそのまま渡すこともできる
int[] scores = { 80, 90, 100 };
Console.WriteLine(Sum(scores)); // 270
params 型[] 名前は、メソッドの最後の引数に1つだけ書ける- 呼び出し側は個数自由でカンマ区切り、または配列そのものを渡せる
Console.WriteLine(...)やstring.Format(...)もこのparamsで可変個を受け取っている
演習
// TODO: params int[] で任意個の整数を受け取り、合計を返す Total を定義し、
// Total(100, 200, 300) の結果を出力してください(600)
___
- 期待される出力:
600
ヒント1を見る
int Total(params int[] a) { int s = 0; foreach (int n in a) s += n; return s; }
ヒント2を見る
上のTotalを定義し、Console.WriteLine(Total(100, 200, 300));
まとめ
params 型[]で引数の個数が自由なメソッドを作れる- 呼び出し側は個数自由のカンマ区切り、または配列を渡す
paramsはメソッドの最後の引数に1つだけ
次回: 同名で引数違いのメソッドを作る「オーバーロード」です。