Я был удивлен, узнав, что параметры "ref" и "out" не отмечены специальным атрибутом, несмотря на существование ParameterInfo.IsOut, ParameterInfo.IsIn (оба из которых, насколько я вижу, всегда ложны), ParameterAttributes.In и ParameterAttributes.Out.Вместо этого параметры «ref» фактически представлены особым видом объекта «Тип», а параметры «out» - это просто параметры ref с дополнительным атрибутом (какого типа атрибут я еще не знаю).
В любом случае, чтобы создать аргумент by-ref, вы вызываете Type.MakeByRefType (), но у меня вопрос: если у вас уже есть тип by-ref, как вы вернетесь к исходному типу?
Подсказка: это не UnderlyingSystemType:
Type t = typeof(int);
Console.WriteLine(t.MakeByRefType().UnderlyingSystemType==t); // FALSE