Me sorprendió saber que los parámetros "ref" y "out" no están marcados por un atributo especial, a pesar de la existencia de ParameterInfo.IsOut, ParameterInfo.IsIn (ambos son siempre falsos por lo que puedo ver), ParameterAttributes.In y ParameterAttributes.Out. En cambio, los parámetros "ref" están representados por un tipo especial de objeto "Type" y los parámetros "out" son solo parámetros ref con un atributo adicional (qué tipo de atributo aún no conozco).Reflexión: Cómo obtener el tipo subyacente de un tipo de ref.
De todos modos, para hacer un argumento de ref se llama a Type.MakeByRefType(), pero mi pregunta es, si ya tiene un tipo de ref, ¿cómo se puede volver al tipo original?
Sugerencia: no es UnderlyingSystemType:
Type t = typeof(int);
Console.WriteLine(t.MakeByRefType().UnderlyingSystemType==t); // FALSE