我们怎样才能从 System.Collections.Generic.List`1[System.String] 得到 List<String>?
How can we get List<String> from System.Collections.Generic.List`1[System.String]?
我正在使用 T4 模板生成 C# class。我需要从另一个 class、Class1 生成阴影 class。
在 Class1 中,我有 TypeAttribute
可以判断 Class1 中 属性 的类型。
通过使用反射,我得到了 TypeAttribute
中指定的类型。
我没有得到任何标准方法来以未损坏的格式获取泛型的类型。
我需要 System.Collections.Generic.List`1[System.String].
List<String>
我正在为 T4Template 使用 T4Toolbox。
T4Toolbox 是否提供任何此类功能来在生成 C# 代码时处理泛型?
谢谢。
这是我最近在玩 T4 模板时拼凑的东西。
static class Exts
{
public static string ToCSharpString(this Type type, StringBuilder sb = null)
{
sb = sb ?? new StringBuilder();
if (type.IsGenericType)
{
sb.Append(type.Name.Split('`')[0]);
sb.Append('<');
bool first = true;
foreach (var tp in type.GenericTypeArguments)
{
if (first)
{
first = false;
}
else
{
sb.Append(", ");
}
sb.Append(tp.ToCSharpString());
}
sb.Append('>');
}
else if (type.IsArray)
{
sb.Append(type.GetElementType().ToCSharpString());
sb.Append("[]");
}
else
{
sb.Append(type.Name);
}
return sb.ToString();
}
}
可能还有更多特殊情况,但它涵盖了泛型和数组。
var list = typeof(List<string>).ToCSharpString();
// List<String>
var dict = typeof(Dictionary<int, HashSet<string>>).ToCSharpString();
// Dictionary<Int32, HashSet<String>>
var array = typeof(Dictionary<int, HashSet<string>>[]).ToCSharpString();
// Dictionary<Int32, HashSet<String>>[]
我正在使用 T4 模板生成 C# class。我需要从另一个 class、Class1 生成阴影 class。
在 Class1 中,我有 TypeAttribute
可以判断 Class1 中 属性 的类型。
通过使用反射,我得到了 TypeAttribute
中指定的类型。
我没有得到任何标准方法来以未损坏的格式获取泛型的类型。
我需要 System.Collections.Generic.List`1[System.String].
List<String>
我正在为 T4Template 使用 T4Toolbox。
T4Toolbox 是否提供任何此类功能来在生成 C# 代码时处理泛型?
谢谢。
这是我最近在玩 T4 模板时拼凑的东西。
static class Exts
{
public static string ToCSharpString(this Type type, StringBuilder sb = null)
{
sb = sb ?? new StringBuilder();
if (type.IsGenericType)
{
sb.Append(type.Name.Split('`')[0]);
sb.Append('<');
bool first = true;
foreach (var tp in type.GenericTypeArguments)
{
if (first)
{
first = false;
}
else
{
sb.Append(", ");
}
sb.Append(tp.ToCSharpString());
}
sb.Append('>');
}
else if (type.IsArray)
{
sb.Append(type.GetElementType().ToCSharpString());
sb.Append("[]");
}
else
{
sb.Append(type.Name);
}
return sb.ToString();
}
}
可能还有更多特殊情况,但它涵盖了泛型和数组。
var list = typeof(List<string>).ToCSharpString();
// List<String>
var dict = typeof(Dictionary<int, HashSet<string>>).ToCSharpString();
// Dictionary<Int32, HashSet<String>>
var array = typeof(Dictionary<int, HashSet<string>>[]).ToCSharpString();
// Dictionary<Int32, HashSet<String>>[]