Example #1
0
        public Member(
            MemberType memberType,
            string name,
            Type declaringType,
            Type type,
            bool isWriteable = true,
            bool isRoot      = false)
        {
            MemberType    = memberType;
            Name          = name;
            JoiningName   = (isRoot || this.IsEnumerableElement()) ? name : "." + name;
            IsRoot        = isRoot;
            IsIdentifier  = IsIdMember(name, declaringType);
            DeclaringType = declaringType;
            Type          = type;

            IsReadable  = memberType.IsReadable();
            IsWriteable = isWriteable;

            IsEnumerable = type.IsEnumerable();

            if (IsEnumerable)
            {
                ElementType = Type.GetEnumerableElementType();
                return;
            }

            IsSimple  = type.IsSimple();
            IsComplex = !IsSimple;
        }
Example #2
0
        private Member(
            MemberType memberType,
            string name,
            Type declaringType,
            Type type,
            Func <Expression, MemberInfo, Expression> accessFactory = null,
            bool isWriteable = true,
            bool isRoot      = false)
        {
            MemberType     = memberType;
            Name           = name;
            DeclaringType  = declaringType;
            Type           = type;
            _accessFactory = accessFactory;
            IsWriteable    = isWriteable;
            IsRoot         = isRoot;

            _hashCode = declaringType.GetHashCode();

            unchecked
            {
                _hashCode = (_hashCode * 397) ^ name.GetHashCode();
            }

            JoiningName  = (isRoot || this.IsEnumerableElement()) ? name : "." + name;
            IsReadable   = memberType.IsReadable();
            IsEnumerable = type.IsEnumerable();

            if (IsEnumerable)
            {
                IsComplex   = IsDictionary = type.IsDictionary();
                ElementType = Type.GetEnumerableElementType();
                return;
            }

            IsSimple  = type.IsSimple();
            IsComplex = !IsSimple;
        }