コード例 #1
0
ファイル: ObjectFormatter.cs プロジェクト: sperling/cskarp
        private StringBuilder AppendComplexTypeName(StringBuilder builder, Type type, ObjectFormattingOptions options)
        {
            if (type.IsArray)
            {
                builder.Append(FormatArrayTypeName(type, arrayOpt: null, options: options));
                return(builder);
            }

            // compiler generated (e.g. iterator)
            if (GeneratedNames.IsGeneratedName(type.Name))
            {
                string iteratorName;
                if (GeneratedNames.TryParseIteratorName(type.Name, out iteratorName) && typeof(IEnumerable).IsAssignableFrom(type))
                {
                    builder.Append(iteratorName);
                    return(builder);
                }
            }

            if (type.IsGenericType)
            {
                // consolidated generic arguments (includes arguments of all declaring types):
                Type[] genericArguments = type.GetGenericArguments();

                if (type.DeclaringType != null)
                {
                    List <Type> nestedTypes = new List <Type>();
                    do
                    {
                        nestedTypes.Add(type);
                        type = type.DeclaringType;
                    }while (type != null);

                    int typeArgumentIndex = 0;
                    for (int i = nestedTypes.Count - 1; i >= 0; i--)
                    {
                        AppendTypeInstantiation(builder, nestedTypes[i], genericArguments, ref typeArgumentIndex, options);
                        if (i > 0)
                        {
                            builder.Append('.');
                        }
                    }
                }
                else
                {
                    int typeArgumentIndex = 0;
                    return(AppendTypeInstantiation(builder, type, genericArguments, ref typeArgumentIndex, options));
                }
            }
            else if (type.DeclaringType != null)
            {
                builder.Append(type.Name.Replace('+', '.'));
            }
            else
            {
                builder.Append(type.Name);
            }

            return(builder);
        }
コード例 #2
0
ファイル: ObjectFormatter.cs プロジェクト: sperling/cskarp
 public override bool IsHiddenMember(System.Reflection.MemberInfo member)
 {
     // Generated fields, e.g. "<property_name>k__BackingField"
     return(GeneratedNames.IsGeneratedName(member.Name));
 }