c# - 将泛型类型定义字符串从 C# 样式转换为 CLR 样式

标签 c# string generics clr

我想转换一个 C# 风格的泛型类型 string,比如:

"System.Dictionary<System.String, System.String>"

与其 CLR 等效:

"System.Dictionary`1[System.String, System.String]"

然后返回。有没有一种简单的方法可以做到这一点,还是我必须求助于字符串操作?

编辑:

我只有 C#/VB/等格式的字符串表示。我手边没有 Type 对象或类似的东西。另一个问题是:如何从 "System.Dictionary<System.String, System.String>" 这样的字符串表示中获取 Type 对象(之后我可以获得类型对象的全名)。

编辑#2:

理由:我正在使用 CodeDom 动态创建对象.我生成 CodeDom 的输入可能包含 C# 中的类型(或任何其他专有格式,如 VB.NET),但我必须在 CodeTypeReference 中使用它们, 它只接受 CLR 样式格式。

最佳答案

对于从 .NET 到 C# 的方向,我看不到一个简单的方法;您可能必须自己实际解析类型。

反之,这很简单:

public static string DotNetToCSharp(string tyName) {
    var provider = new Microsoft.CSharp.CSharpCodeProvider();
    return provider.GetTypeOutput(new System.CodeDom.CodeTypeReference(tyName));
}

关于c# - 将泛型类型定义字符串从 C# 样式转换为 CLR 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2925721/

相关文章:

c# - 使用 IEnumerable 重载参数函数

c# - 在 docker 上部署一个 net core 2 应用程序

java - 字符串数组是可变的吗?

generics - Kotlin:使泛型类型的子类继承函数并限制可用的输出类型

c# - 序列化实体对象

c# - 使用 C# 构建具有动态行和列的 htmlTable

c - 使用 C scanf_s 输入字符串

c++ - stoi 没有在此范围内声明?

generics - 如何声明对泛型中任何子程序形式类型的访问?

java - 类型转换比较器为子类工作