예제 #1
0
파일: InspectType.cs 프로젝트: 24/source_04
 public InspectValueObject(string name, object value, InspectValueState state = InspectValueState.None)
 {
     this.name  = name;
     this.value = value;
     this.state = state;
     Init();
 }
예제 #2
0
파일: InspectType.cs 프로젝트: 24/source_04
 public InspectValue Next()
 {
     if (state == InspectValueState.None)
     {
         if (value == null)
         {
             state = InspectValueState.Value;
             return(new InspectValue(name, InspectValueType.Value));
         }
         //if (_depth++ > _maxDepth)
         //    return false;
         if (_isValue)
         {
             state = InspectValueState.Value;
             return(new InspectValue(name, InspectValueType.Value, value, type));
         }
         else if (value is IEnumerable)
         {
             onlyVisible = true;
         }
         if (name == "")
         {
             name = "value";
         }
         else
         {
             name = name + "_value";
         }
         state = InspectValueState.Properties;
     }
     if (state == InspectValueState.Properties)
     {
         while (propertyEnumerator.MoveNext())
         {
             PropertyInfo property = propertyEnumerator.Current;
             if (onlyVisible && Attribute.GetCustomAttribute(property, typeof(pb.VisibleAttribute)) == null)
             {
                 continue;
             }
             object o = null;
             try
             {
                 o = property.GetGetMethod().Invoke(value, new object[0]);
             }
             catch (Exception ex)
             {
                 o = Error.GetErrorMessage(ex);
             }
             string name2;
             if (name == "")
             {
                 name2 = property.Name;
             }
             else
             {
                 name2 = name + "_" + property.Name;
             }
             return(new InspectValue(name2, InspectValueType.NewValue, o));
         }
         state = InspectValueState.Fields;
     }
     if (state == InspectValueState.Fields)
     {
         while (fieldEnumerator.MoveNext())
         {
             FieldInfo field = fieldEnumerator.Current;
             if (onlyVisible && Attribute.GetCustomAttribute(field, typeof(pb.VisibleAttribute)) == null)
             {
                 continue;
             }
             object o = null;
             try
             {
                 o = field.GetValue(value);
             }
             catch (Exception ex)
             {
                 o = Error.GetErrorMessage(ex);
             }
             string name2;
             if (name == "")
             {
                 name2 = field.Name;
             }
             else
             {
                 name2 = name + "_" + field.Name;
             }
             return(new InspectValue(name2, InspectValueType.NewValue, o));
         }
         if (value is IEnumerable)
         {
             state = InspectValueState.EnumerableBegin;
         }
     }
     if (state == InspectValueState.EnumerableBegin)
     {
         state           = InspectValueState.Enumerable;
         enumerator      = ((IEnumerable)value).GetEnumerator();
         enumeratorIndex = 1;
         return(new InspectValue(name, InspectValueType.EnumerableBegin));
     }
     if (state == InspectValueState.Enumerable)
     {
         if (enumerator.MoveNext())
         {
             return(new InspectValue(name + enumeratorIndex++.ToString(), InspectValueType.NewValue, enumerator.Current));
         }
         state = InspectValueState.EnumerableEnd;
         return(new InspectValue(name, InspectValueType.EnumerableEnd));
     }
     return(null);
 }