Есть такая штука, которая позволяет вызывать метод, когда мы не знаем сколько параметров хотим туда передать:
void Method(params object[] arr)
Но есть некоторые особенности, которые нужно понимать:
1. По-умолчанию такой вызов создает новый массив (т.е. триггерит GC, что плохо):
void Method1(params object[] arr) void Method2(object[] arr) var arr = new int[10]; Method1(arr); // будет создан массив object[1] и к первому элементу присвоен массив arr Method2(arr); // будет ошибка компиляции, т.к. object[] не соотвествует типу int[]
2. Если мы передадим точный тип массива, то это не будет создавать новый массив:
void Method1(params int[] arr) void Method2(int[] arr) var arr = new int[10]; Method1(arr); Method2(arr); // Эти 2 вызова идентичны
3. Любой вызов будет создавать новый массив:
void Method(params int[] arr) Method(1, 2, 3) Method(1)
Вывод: избегайте методов с params, особенно если это хот часть.
1 min read
0 Comments