Для того, что бы метод принимал произвольное количество аргументов, применяется ключевое слово params.
Дополнительные параметры не указываются. Синтаксис:
params тип[] имя_массива
using System;
class One {
public decimal Add(params decimal[] args) {
decimal res=0;
for(int i=0; i<args.Length; i++) {
res+=args[i];
}
return res;
}
}
class Two {
decimal val;
public Two(decimal arg) {
val = arg;
}
/*неявное (автоматическое) преобразование из типа Two в тип decimal
объекты будут складываться, как значения типа decimal*/
public static implicit operator decimal(Two obj) {
return obj.val;
}
}
class Program {
public static int Main() {
One O = new One();
//передача аргументов в виде значений, разделенных запятыми
Console.WriteLine(O.Add(1,2,3,4,5,6,7,8,9));
decimal[] arra = new decimal[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//передача аргументов в виде массива
Console.WriteLine(O.Add(arra));
Two T = new Two(5);
//передача аргументов в виде преобразованных объектов в тип decimal
Console.WriteLine(O.Add(T,T,T,T,T));
Console.ReadKey();
return 0;
}
}
Подход применения не определенного количества аргументов редко используется, так как проще передать в метод коллекцию и работать с ней. Однако часто приходится использовать в задачах универа.