本文へスキップ
BecomeCoder

C#文法コース · 第4章 メソッド · レッスン33

params ― 可変長引数

ブラウザで完結

導入

「合計を出す」「メッセージを組み立てる」——渡す引数の個数が決まっていないメソッドを作りたいことがあります。paramsを使うと、呼び出し側は好きな個数の引数をカンマ区切りで渡せ、受け取る側では配列として扱えます。Console.WriteLinestring.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つだけ

次回: 同名で引数違いのメソッドを作る「オーバーロード」です。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。