Думайте о 'ref object' как о "Я беру ссылку на переменную, которая может хранить объект". Предположим, что myfunction пыталась сохранить int в переданной вами переменной? Это может привести к сбою во время выполнения, что нежелательно.
В примечании вы можете использовать typeof (string) вместо вызова GetType ("System.String"). Вы также можете просто сказать:
Object arr = new string[2];
Чтобы получить доступ к массиву в первую очередь, вы можете сделать это:
string[] arr = new string[2];
arr[0] = "1";
object arrObj = arr;
myfunction(ref arrObj);
Я бы дважды проверил, правильно ли вы используете метод myfunction; это довольно необычный тип параметра для получения инициализированного массива.