将带有泛型的.NET typename转换为C#表示

时间:2015-11-02 14:35:35

标签: c# generics

我正在进行代码生成,在此任务中,我需要创建可能包含类型参数的typename的C#表示。

E.g。我需要从“Dictionary`2 [[int],[string]] ”获取“Dictionary< int,string>”

在通用情况下,这应该比仅仅替换字符串复杂得多。

更新以回答问题中的评论

  • 我正在生成源代码,
  • 我的输入是Type字符串或CROSS APPLY对象(因为它们可以很容易地相互转换)。
  • 虽然不典型,但我的代码应该为嵌套类型参数做好准备。

1 个答案:

答案 0 :(得分:1)

public string ToCSharpType(Type type)
{
    if (!type.IsGeneric)
        return type.FullName;

    var result = new StringBuilder();
    string name = type.GetGenericTypeDefinition().FullName;
    result.Append(name.Substring(0, name.IndexOf('`'));
    result.Append('<');
    var args = type.GetGenericArguments();
    for (int i = 0; i < args.Length; i++)
    {
         result.Append(ToCSharpType(args[i]);
         if (i < args.Length - 1)
             result.Append(", ");
    }
    result.Append('>');
}