2011-06-07 12 views
6

Dado un objeto de tipo .NET encontrado a través de la reflexión, es posible imprimir bastante o descompilar este tipo como una declaración de C#, teniendo en cuenta los alias de tipo C#, etc. ?Obtener referencia de estilo C# de tipo CLR nombre completo

Por ejemplo,

Int32 -> int 
String -> string 
Nullable<Int32> -> int? 
List<au.net.ExampleObject> -> List<ExampleObject> 

Quiero ser capaz de imprimir métodos cerca de lo que fue escrito originalmente en la fuente.

Si no hay nada en .NET framework, ¿hay una biblioteca de terceros? Posiblemente pueda echarle un vistazo al ILSpy.

Respuesta

7

Ver this answer.

Ejemplo:

using System.CodeDom; 
using System.CodeDom.Compiler; 

CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); 

var typeRef = new CodeTypeReference("System.Nullable`1[System.Int32]"); 
string typeOutput = provider.GetTypeOutput(typeRef); // "System.Nullable<int>" 

Se le ayudará con int y string -como cosas, así como los genéricos, sin embargo tendrá que trabajar a cabo Nullable<T> -> T? y using s mismo.

0

Hay una solución para las declaraciones de tipos en another post. Puede ampliarlo para admitir alias de tipo fácilmente.

+0

Sí, es por eso que yo consideraba mirando a la fuente de un C# decompilador. En realidad, Jon Skeet ha mencionado CSharpCodeProvider en otra pregunta. –

1

Los alias se compilan para lo que son un alias. Nunca sabrá si fue string o String en la fuente y, francamente, no veo por qué importaría.

+0

Me doy cuenta de esto, estaba intentando sugerir que preferiría el alias si fuera posible. –

Cuestiones relacionadas