public static object DrawAndGetNewValue(Type type, object value, DrawInfo draw, FieldInfo field) { for (int i = 0; i < drawers.Count; i++) { if (drawers[i].TypeEquals(type)) { int index = i; IObjectDrawer d = drawers[index]; if (usingDrawerIndexs.Contains(index)) { d = GetOtherDrawer(d.GetType()); } else { usingDrawerIndexs.Add(index); } value = d.DrawAndGetNewValue(type, value, draw, field); if (!usingDrawerIndexs.Remove(index)) { ReturnOtherDrawer(d); } return(value); } } ShowUnrecognized(draw.ShowName); return(value); }
private static object DrawAndGetNewValue(Type type, FieldInfo field, object value, bool needDelayed) { bool changeable = true; bool staticField = field.IsStatic; string name = field.Name; //属性会带这个字符 if (name.Contains("k__BackingField")) { changeable = false; name = "P:" + name.Replace("k__BackingField", "").Trim().TrimStart('<').TrimEnd('>').Trim(); } if (staticField) { name = $"Static:{name}"; } var draw = new DrawInfo() { Changeable = changeable, NeedDelayed = needDelayed, ShowName = name, ShowNameWidth = -1, IsStatic = staticField, FieldName = field.Name }; for (int i = 0; i < drawers.Count; i++) { if (drawers[i].TypeEquals(type)) { int index = i; IObjectDrawer d = drawers[index]; if (usingDrawerIndexs.Contains(index)) { d = GetOtherDrawer(d.GetType()); } else { usingDrawerIndexs.Add(index); } value = d.DrawAndGetNewValue(type, value, draw, field); if (!usingDrawerIndexs.Remove(index)) { ReturnOtherDrawer(d); } return(value); } } ShowUnrecognized(name); return(value); }
private static void ReturnOtherDrawer(IObjectDrawer drawer) { Type type = drawer.GetType(); if (otherDrawers.ContainsKey(type)) { otherDrawers[type].Add(drawer); } else { otherDrawers.Add(type, new List <IObjectDrawer>() { drawer }); } }
private static void ReturnDrawer(IObjectDrawer drawer) { var t = drawer.GetType(); if (drawerPool.ContainsKey(t)) { if (drawerPool[t] == null) { drawerPool[t] = new List <IObjectDrawer>(); } drawerPool[t].Add(drawer); } else { drawerPool.Add(t, new List <IObjectDrawer>() { drawer }); } }