コード例 #1
0
ファイル: ObjectDumper.cs プロジェクト: xoposhiy/KOIB
        private static void DumpEnumerable(IEnumerable enumerable, DumpContext ctx)
        {
            Int32        nCount          = 0;
            Boolean      isSimpleType    = true;
            Boolean      isKeyValuePairs = false;
            PropertyInfo keyProp         = null;
            PropertyInfo valueProp       = null;
            var          type            = (from object value in enumerable
                                            where value != null
                                            select value.GetType()).FirstOrDefault();

            if (type != null)
            {
                if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(KeyValuePair <,>))
                {
                    keyProp         = type.GetProperty("Key");
                    valueProp       = type.GetProperty("Value");
                    isKeyValuePairs = true;
                }
                isSimpleType = Type.GetTypeCode(type) != TypeCode.Object;
            }
            foreach (Object value in enumerable)
            {
                if (!isSimpleType)
                {
                    ctx.NewLine();
                }
                else if (nCount > 0)
                {
                    ctx.Builder.Append(ctx.Settings.EnumerableDelimiter);
                }
                if (nCount >= ctx.Settings.MaxEnumerableItems)
                {
                    ctx.Builder.Append("... (first ").Append(nCount.ToString()).Append(" items");
                    var collection = enumerable as ICollection;
                    if (collection != null)
                    {
                        ctx.Builder.Append(", ").Append(collection.Count.ToString()).Append(" items total");
                    }
                    ctx.Builder.Append(")");
                    break;
                }
                if (!isKeyValuePairs)
                {
                    DumpObject(value, true, ctx);
                }
                else
                {
                    ctx.Builder.Append(ToStringSafe(keyProp.GetValue(value, null)));
                    ctx.Builder.Append(": ");
                    DumpObject(valueProp.GetValue(value, null), false, ctx);
                }
                nCount++;
            }
            if (nCount == 0)
            {
                ctx.Builder.Append("<EMPTY>");
            }
        }
コード例 #2
0
ファイル: ObjectDumper.cs プロジェクト: xoposhiy/KOIB
        private static void DumpProps(object obj, Type type, DumpContext ctx)
        {
            var propValues = new Dictionary <String, Object>();

            PropertyInfo[] props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public);
            foreach (var prop in props)
            {
                if (!prop.CanRead || prop.GetIndexParameters().Length != 0)
                {
                    continue;
                }
                if (ctx.Settings.PropsToIgnore.Contains(prop.Name))
                {
                    continue;
                }
                try
                {
                    propValues[prop.Name] = prop.GetValue(obj, null);
                }
                catch (TargetInvocationException ex)
                {
                    propValues[prop.Name] = String.Format("Ошибка при получении свойства {0} объекта типа {1} : {2}",
                                                          prop.Name,
                                                          type.FullName,
                                                          ex.InnerException != null ? ex.InnerException.Message : ex.Message
                                                          );
                }
            }
            FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public);
            foreach (var field in fields)
            {
                if (ctx.Settings.PropsToIgnore.Contains(field.Name))
                {
                    continue;
                }
                try
                {
                    propValues[field.Name] = field.GetValue(obj);
                }
                catch (FieldAccessException ex)
                {
                    propValues[field.Name] = ex.Message;
                }
            }
            if (propValues.Count == 0 || propValues.Count > ctx.Settings.MaxProps)
            {
                WriteObject(obj, type, ctx);
            }
            else
            {
                foreach (KeyValuePair <String, Object> pair in propValues)
                {
                    ctx.NewLine();
                    ctx.Builder.Append(pair.Key).Append(": ");
                    DumpObject(pair.Value, false, ctx);
                }
            }
        }
コード例 #3
0
ファイル: ObjectDumper.cs プロジェクト: nico-izo/KOIB
 private static void DumpEnumerable(IEnumerable enumerable, DumpContext ctx)
 {
     Int32 nCount = 0;
     Boolean isSimpleType = true;
     Boolean isKeyValuePairs = false;
     PropertyInfo keyProp = null;
     PropertyInfo valueProp = null;
     var type = (from object value in enumerable
                 where value != null
                 select value.GetType()).FirstOrDefault();
     if (type != null)
     {
         if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof (KeyValuePair<,>))
         {
             keyProp = type.GetProperty("Key");
             valueProp = type.GetProperty("Value");
             isKeyValuePairs = true;
         }
         isSimpleType = Type.GetTypeCode(type) != TypeCode.Object;
     }
     foreach (Object value in enumerable)
     {
         if (!isSimpleType)
             ctx.NewLine();
         else if (nCount > 0)
             ctx.Builder.Append(ctx.Settings.EnumerableDelimiter);
         if (nCount >= ctx.Settings.MaxEnumerableItems)
         {
             ctx.Builder.Append("... (first ").Append(nCount.ToString()).Append(" items");
             var collection = enumerable as ICollection;
             if (collection != null)
                 ctx.Builder.Append(", ").Append(collection.Count.ToString()).Append(" items total");
             ctx.Builder.Append(")");
             break;
         }
         if (!isKeyValuePairs)
             DumpObject(value, true, ctx);
         else
         {
             ctx.Builder.Append(ToStringSafe(keyProp.GetValue(value, null)));
             ctx.Builder.Append(": ");
             DumpObject(valueProp.GetValue(value, null), false, ctx);
         }
         nCount++;
     }
     if (nCount == 0)
         ctx.Builder.Append("<EMPTY>");
 }
コード例 #4
0
ファイル: ObjectDumper.cs プロジェクト: nico-izo/KOIB
 private static void DumpProps(object obj, Type type, DumpContext ctx)
 {
     var propValues = new Dictionary<String, Object>();
     PropertyInfo[] props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public);
     foreach (var prop in props)
     {
         if (!prop.CanRead || prop.GetIndexParameters().Length != 0)
             continue;
         if (ctx.Settings.PropsToIgnore.Contains(prop.Name))
             continue;
         try
         {
             propValues[prop.Name] = prop.GetValue(obj, null);
         }
         catch (TargetInvocationException ex)
         {
             propValues[prop.Name] = String.Format("Ошибка при получении свойства {0} объекта типа {1} : {2}",
                 prop.Name,
                 type.FullName,
                 ex.InnerException != null ? ex.InnerException.Message : ex.Message
                 );
         }
     }
     FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public);
     foreach (var field in fields)
     {
         if (ctx.Settings.PropsToIgnore.Contains(field.Name))
             continue;
         try
         {
             propValues[field.Name] = field.GetValue(obj);
         }
         catch (FieldAccessException ex)
         {
             propValues[field.Name] = ex.Message;
         }
     }
     if (propValues.Count == 0 || propValues.Count > ctx.Settings.MaxProps)
         WriteObject(obj, type, ctx);
     else
     {
         foreach (KeyValuePair<String, Object> pair in propValues)
         {
             ctx.NewLine();
             ctx.Builder.Append(pair.Key).Append(": ");
             DumpObject(pair.Value, false, ctx);
         }
     }
 }