Генерация кода - есть ли простой способ получить правильное строковое представление обнуляемого типа?

Поэтому я создаю приложение, которое будет выполнять тонну генерации кода с выходами C # и VB (в зависимости от настроек проекта).

У меня есть CodeTemplateEngine с двумя производными классами VBTemplateEngine и CSharpTemplateEngine. Этот вопрос касается создания подписей свойств на основе столбцов в таблице базы данных. Используя метод GetSchemaTable IDataReader, я собираю тип CLR столбца, например «System.Int32», и определяет, является ли он IsNullable. Тем не менее, я хотел бы сохранить код простым, а не иметь свойство, которое выглядит следующим образом:

    public System.Int32? SomeIntegerColumn { get; set; }

или же

    public Nullable<System.Int32> SomeIntegerColumn { get; set; },

где тип свойства будет разрешен с помощью этой функции (из моего VBTemplateEngine),

    public override string ResolveCLRType(bool? isNullable, string runtimeType)
    {
        Type type = TypeUtils.ResolveType(runtimeType);
        if (isNullable.HasValue && isNullable.Value == true && type.IsValueType)
        {
            return "System.Nullable(Of " + type.FullName + ")";
            // or, for example...
            return type.FullName + "?";
        }
        else
        {
            return type.FullName;
        }
    },

Я хотел бы создать более простое свойство. Я ненавижу идею создания строки типа из ничего, и я бы предпочел что-то вроде:

    public int? SomeIntegerColumn { get; set; }

Есть ли что-нибудь встроенное, например, в классах VBCodeProvider или CSharpCodeProvider, которые как-то позаботятся об этом для меня?

Или есть способ получить псевдоним типаint? из строки типа какSystem.Nullable'1[System.Int32]?

Спасибо!

ОБНОВИТЬ:

Нашел что-то это бы сработало, но я все еще настороженно отношусь к тому типу сопоставления полных имён Type с их псевдонимами.

Ответы на вопрос(2)

Ваш ответ на вопрос