Получить ссылку на тип стиля C # из полного имени типа CLR - PullRequest
6 голосов
/ 07 июня 2011

Учитывая объект типа .NET, найденный с помощью отражения, можно ли печатать или декомпилировать этот тип в виде объявления C # с учетом псевдонимов типа C # и т. Д .?

Например,

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

Я хочу иметь возможность распечатывать методы, близкие к тому, что было изначально написано в источнике.

Если в .NET Framework ничего нет, есть ли сторонняя библиотека? Я мог бы взглянуть на ILSpy .

Ответы [ 5 ]

7 голосов
/ 07 июня 2011

См. этот ответ.

Пример:

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>"

Это поможет вам с int и string -подобнымвещи, а также дженерики, однако вам придется самим поработать Nullable<T> -> T? и using.

1 голос
/ 07 июня 2011

Есть только 15 псевдонимов (+ Nullable) . Просто используйте строку. Замените на них.

1 голос
/ 07 июня 2011

Псевдонимы компилируются для того, для чего они являются псевдонимами. Вы никогда не узнаете, было ли это string или String в источнике, и, честно говоря, я не понимаю, почему это имеет значение.

0 голосов
/ 04 июня 2014

В этой статье есть источник c # для метода, который сделает это: http://www.codeproject.com/Tips/621812/User-friendly-names-for-Types

0 голосов
/ 07 июня 2011

Существует решение для объявлений типов в другой пост . Вы можете легко расширять его для поддержки псевдонимов типов.

...