private static StringBuilder AppendCSharpName(this StringBuilder sb, Type tp, CSharpNameOptions options) { if (tp.IsArray) { return sb .AppendCSharpName(tp.GetElementType(), options) .Append('[') .Append(new string(',', tp.GetArrayRank() - 1)) .Append(']'); } if (tp.IsGenericType) { if (tp.GetGenericTypeDefinition() == typeof(Nullable<>)) { return sb .AppendCSharpName(tp.GetGenericArguments().First(), options) .Append('?'); } var genericArguments = tp.GetGenericArguments(); var genericTypeDefenition = options.HasFlag(CSharpNameOptions.UseFullName) ? tp.GetGenericTypeDefinition().FullName : tp.GetGenericTypeDefinition().Name; sb.Append(genericTypeDefenition, 0, genericTypeDefenition.IndexOf('`')) .Append('<') .AppendCSharpName(genericArguments.First(), options); for (int i = 1; i < genericArguments.Length; i++) { sb.Append(", ").AppendCSharpName(genericArguments[i], options); } return sb.Append('>'); } if (options.HasFlag(CSharpNameOptions.AliasForPrimitives) && CSharpAliasTypes.ContainsKey(tp)) { return sb.Append(CSharpAliasTypes[tp]); } return sb.Append(options.HasFlag(CSharpNameOptions.UseFullName) ? tp.FullName : tp.Name); }
/// <summary>Gets the C# name for the type.</summary> /// <param name="tp"> /// The type. /// </param> /// <param name="options"> /// The naming options. /// </param> public static string GetCSharpName(this Type tp, CSharpNameOptions options = CSharpNameOptions.AliasForPrimitives) { var sb = new StringBuilder(); sb.AppendCSharpName(tp, options); return sb.ToString(); }