【发布时间】:2011-01-28 09:50:51
【问题描述】:
所以我正在构建一个应用程序,它将使用 C# 和 VB 输出(取决于项目设置)生成大量代码。
我有一个 CodeTemplateEngine,它有两个派生类 VBTemplateEngine 和 CSharpTemplateEngine。这个问题是关于根据数据库表中的列创建属性签名。使用 IDataReader 的 GetSchemaTable 方法,我收集了列的 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 类中,可以以某种方式为我解决这个问题?
或者有没有办法从像System.Nullable'1[System.Int32] 这样的类型字符串中获取int? 的类型别名?
谢谢!
更新:
Found something 可以,但我仍然对类型全名到其别名的那种类型的映射持谨慎态度。
【问题讨论】:
标签: c# vb.net code-generation