Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 /// <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();
 }