MigraDoc.DocumentObjectModel.Internals.ValueDescriptor.CreateValueDescriptor C# (CSharp) Метод

CreateValueDescriptor() статический приватный Метод

static private CreateValueDescriptor ( MemberInfo memberInfo, MigraDoc.DocumentObjectModel.Internals.DVAttribute attr ) : ValueDescriptor
memberInfo System.Reflection.MemberInfo
attr MigraDoc.DocumentObjectModel.Internals.DVAttribute
Результат ValueDescriptor
    internal static ValueDescriptor CreateValueDescriptor(MemberInfo memberInfo, DVAttribute attr)
    {
      VDFlags flags = VDFlags.None;
      if (attr.RefOnly)
        flags |= VDFlags.RefOnly;

      string name = memberInfo.Name;

      Type type;
      if (memberInfo is FieldInfo)
        type = ((FieldInfo)memberInfo).FieldType;
      else
        type = ((PropertyInfo)memberInfo).PropertyType;

      if (type == typeof(NBool))
        return new NullableDescriptor(name, typeof(Boolean), type, memberInfo, flags);

      if (type == typeof(NInt))
        return new NullableDescriptor(name, typeof(Int32), type, memberInfo, flags);

      if (type == typeof(NDouble))
        return new NullableDescriptor(name, typeof(Double), type, memberInfo, flags);

      if (type == typeof(NString))
        return new NullableDescriptor(name, typeof(String), type, memberInfo, flags);

      if (type == typeof(String))
        return new ValueTypeDescriptor(name, typeof(String), type, memberInfo, flags);

      if (type == typeof(NEnum))
      {
        Type valueType = attr.Type;
        Debug.Assert(valueType.IsSubclassOf(typeof(Enum)), "NEnum must have 'Type' attribute with the underlying type");
        return new NullableDescriptor(name, valueType, type, memberInfo, flags);
      }

      if (type.IsSubclassOf(typeof(ValueType)))
        return new ValueTypeDescriptor(name, type, type, memberInfo, flags);

      if (typeof(DocumentObjectCollection).IsAssignableFrom(type))
        return new DocumentObjectCollectionDescriptor(name, type, type, memberInfo, flags);

      if (typeof(DocumentObject).IsAssignableFrom(type))
        return new DocumentObjectDescriptor(name, type, type, memberInfo, flags);

      Debug.Assert(false, type.FullName);
      return null;
    }

Usage Example

Пример #1
0
        /// <summary>
        /// Adds a value descriptor for each field and property found in type to meta.
        /// </summary>
        static void AddValueDescriptors(Meta meta, Type type)
        {
#if !NETFX_CORE
            FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
#else
            var fieldInfos = type.GetTypeInfo().DeclaredFields;
#endif
            foreach (FieldInfo fieldInfo in fieldInfos)
            {
#if DEBUG_
                string name = fieldInfo.Name;
                if (name == "parent")
                {
                    name.GetType();
                }
#endif
                DVAttribute[] dvs = (DVAttribute[])fieldInfo.GetCustomAttributes(typeof(DVAttribute), false);
                if (dvs.Length == 1)
                {
                    ValueDescriptor vd = ValueDescriptor.CreateValueDescriptor(fieldInfo, dvs[0]);
                    meta.ValueDescriptors.Add(vd);
                }
            }

#if !NETFX_CORE
            PropertyInfo[] propInfos = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
#else
            var propInfos = type.GetTypeInfo().DeclaredProperties;
#endif
            foreach (PropertyInfo propInfo in propInfos)
            {
#if DEBUG_
                string name = propInfo.Name;
                if (name == "Font")
                {
                    name.GetType();
                }
#endif
                DVAttribute[] dvs = (DVAttribute[])propInfo.GetCustomAttributes(typeof(DVAttribute), false);
                if (dvs.Length == 1)
                {
                    ValueDescriptor vd = ValueDescriptor.CreateValueDescriptor(propInfo, dvs[0]);
                    meta.ValueDescriptors.Add(vd);
                }
            }
        }