Распаковка массива в аргументы метода
Как вы знаете, C# поддерживает различные методы через params
ключевое слово:
int Add(params int[] xs) {
return xs.Sum();
}
Который затем может быть вызван с любым количеством аргументов, которые вам нравятся:
Add(1);
Add(1, 2);
Add(1, 2, 3);
Но сказать, что я хочу позвонить Add
используя массив int
с1. Возможно ли это и как (желательно без отражения)? Я попробовал следующее, но они дали синтаксические ошибки (синтаксис был просто угадать):
var xs = new[] { 1, 2, 3 };
Add(xs...); // doesn't work; syntax error
Add(params xs); // doesn't work; syntax error
1 Фактический вариант использования другой, но я подумал, что этот пример будет менее сложным.
5 ответов
Ваш метод нуждается в типе возврата:
int Add(params int[] xs) {
return xs.Sum();
}
И чтобы вызвать его с помощью массива, вы просто используете обычный синтаксис для вызовов методов:
int[] xs = new[] { 1, 2, 3 };
var result = Add(xs);
params
Ключевое слово в основном просто позволяет воспользоваться небольшим синтаксическим сахаром. Это говорит компилятору, что когда он видит
Add(1, 2, 3);
Это должно преобразовать это в
Add(new int[] { 1, 2, 3});
Таким образом, чтобы сделать это из своего кода, вам не нужно делать ничего особенного.
int[] parameters = new int[] { ... }
results = Add(parameters);
Смотрите документацию для более подробной информации.
Насколько я знаю, вы можете просто вызвать его с массивом, как если бы вы использовали обычный метод:
Add(xs);
Ничего особенного, нет params
ключевое слово при вызове метода, без точек.
static void Main(string[] args)
{
int[] tmp = {1, 2};
var sum = Add(tmp);
}
public static int Add(params int[] xs)
{
return xs.Sum();
}
Должно работать просто отлично..
Если это что-то похожее на Java, вы можете просто вызвать метод с массивом в качестве аргумента.
Эта особенность также делает varargs опасным, особенно если один из типов vararg также является массивом...