メソッドで可変長引数を受け取る - Visual C# プログラミング

SPECIAL


メソッドで可変長引数を受け取る

C# では、メソッド定義の際に引数に "params" キーワードをつけることにより、可変長引数を受け取ることができるようになっています。

public int Sum(params int[] values)

{

int result = 0;

 

for (int i = 0; i < values.Length; i++)

{

result += values[i];

}

 

return result;

}

引数の最初に "params" を付け、続いて受け取りたいデータ型を配列で指定して、それを受け取る変数名を指定しています。

このようにすることで、引数に指定された値を、メソッド内では配列として扱うことができるようになります。渡された引数の個数は "values.Length" というように、配列の長さを取得することで簡単に得られます。

 

このように定義した関数の使い方も簡単で、例えば上記の通りに定義した場合は、次のように呼び出すことができます。

int total = Sum(1, 3, 10, 5);

 

 可変長の引数を受け取りたい場合、"params" キーワードをつけなくても、引数の型を配列にすることで実現することも可能です。

その場合、関数の定義自体は "params" キーワードがなくなるくらいで、実装はなにも変わりません。

public int Sum(int[] values)

{

int result = 0;

 

for (int i = 0; i < values.Length; i++)

{

result += values[i];

}

 

return result;

}

ただ、呼び出しの際には、渡す引数を配列で用意しなくてはいけなくなるので、次のようにとても複雑になってきます。

int total = Sum(new int[] { 1, 3, 10, 5 } );

こちらでも動きは同じですし、慣れてしまえばそういうものだという理解で済んでしまうかもしれないですけど、可能であれば "params" キーワードをつけて実装した方が、ソースコードの可読性の観点で見て、効果的なように思います。


[ もどる ]