Итак, я создаю приложение, которое будет выполнять тонну генерации кода с выходами 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]
?
Спасибо!
UPDATE:
Нашел что-то , что подойдет, но я по-прежнему настороженно отношусь к тому типу сопоставления полных имён Type с их псевдонимами.