protected void AddMemberPin(MemberInfo member) { if (!AllowMember(member)) { return; } var oattr = MemberAttributeHandler <OutputAttribute>(member); Type memberType = typeof(object); switch (member) { case FieldInfo field: memberType = field.FieldType; break; case PropertyInfo prop: memberType = prop.PropertyType; break; } var enumerable = false; var dictionary = false; var allowEnumconv = AllowEnumBinsizing(member, memberType); GetEnumerableGenerics(member, memberType, out var potentialGenDictT, out var potentialGenEnumT); if (allowEnumconv && potentialGenDictT != null) { var stype = potentialGenDictT.GenericTypeArguments; oattr.Name = member.Name + " Values"; oattr.BinVisibility = oattr.Visibility == PinVisibility.OnlyInspector ? PinVisibility.OnlyInspector : PinVisibility.Hidden; var kattr = (OutputAttribute)oattr.Clone(); kattr.Name = member.Name + " Keys"; kattr.BinVisibility = PinVisibility.OnlyInspector; Pd.AddOutput(TransformType(stype[0], member), kattr, binSized: true); Pd.AddOutput(TransformType(stype[1], member), oattr, binSized: true); dictionary = true; } else if (allowEnumconv && potentialGenEnumT != null) { var stype = potentialGenEnumT.GenericTypeArguments[0]; oattr.BinVisibility = oattr.Visibility == PinVisibility.OnlyInspector ? PinVisibility.OnlyInspector : PinVisibility.Hidden; Pd.AddOutput(TransformType(stype, member), oattr, binSized: true); enumerable = true; } else { Pd.AddOutput(TransformType(memberType, member), oattr); enumerable = false; } AddMemberAttributePin(member); IsMemberEnumerable.Add(member, enumerable); IsMemberDictionary.Add(member, dictionary); }