gpt4 book ai didi

c# - 生成代码——是否有一种简单的方法来获取可为空类型的正确字符串表示形式?

转载 作者:行者123 更新时间:2023-12-02 17:41:14 24 4
gpt4 key购买 nike

因此,我正在构建一个应用程序,它将使用 C# 和 VB 输出(取决于项目设置)生成大量代码。

我有一个 CodeTemplateEngine,它有两个派生类 VBTemplateEngine 和 CSharpTemplateEngine。这个问题涉及基于数据库表中的列创建属性签名。使用 IDataReader 的 GetSchemaTable 方法,我收集列的 CLR 类型(例如“System.Int32”)以及它是否为 Nullable。但是,我想保持代码简单,而不是使用如下所示的属性:

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

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

其中属性类型将使用此函数解析(来 self 的 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这样做就可以了,但我仍然对类型全名到别名的映射类型保持警惕。

最佳答案

您可以使用 CodeDom 对泛型类型的支持和 GetTypeOutput 方法来执行此操作:

CodeTypeReference ctr;
if (/* you want to output this as nullable */)
{
ctr = new CodeTypeReference(typeof(Nullable<>));
ctr.TypeArguments.Add(new CodeTypeReference(typeName));
}
else
{
ctr = new CodeTypeReference(typeName);
}
string typeName = codeDomProvider.GetTypeOutput(ctr);

这将尊重特定于语言的类型关键字,例如 C# int或VB Integer ,尽管它仍然会给你 System.Nullable<int>而不是int? .

关于c# - 生成代码——是否有一种简单的方法来获取可为空类型的正确字符串表示形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2459577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com