Если я правильно понимаю, это странная вещь, связанная с тем, как clr работает с массивами параметров. Это довольно глубоко, и я видел, как Эрик Липперт говорил об этом несколько раз.
Метод с массивом параметров может быть вызван в «нормальной» или «расширенной» форме. Нормальная форма такая, как будто не было "params". Расширенная форма принимает параметры и объединяет их в массив, который генерируется автоматически. Если обе формы применимы, то нормальная форма побеждает расширенную форму.
Длинное и короткое из этого: смешивание объекта params [] с массивом
Аргументы - это рецепт путаницы. Постарайся избежать этого. Если вы находитесь в
ситуация, когда вы передаете массивы в метод params object [],
назовите это в его нормальной форме. Создайте новый объект [] {...} и поместите
аргументы в массиве сами.
Итак, чтобы это исправить
bool response2 = (bool)obj.Invoke("PVTMethod2", (object)new RandomClass[0]);
или
bool response2 = (bool)obj.Invoke("PVTMethod2", new object {new RandomClass[0]});
Я не буду притворяться, что знаю внутренности CLR, однако, если вы заинтересованы, вы можете проверить эти вопросы
Атрибут с конструктором params object [] выдаёт несогласованные ошибки компилятора
C # params object [] странное поведение
Почему параметры ведут себя так?
Есть ли способ отвлечь myFunc (1, 2, 3) от myFunc (new int [] {1, 2, 3})?