public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = (PackageName != null ? PackageName.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (TypeName != null ? TypeName.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ IsBuiltIn.GetHashCode();
         hashCode = (hashCode * 397) ^ IsArray.GetHashCode();
         hashCode = (hashCode * 397) ^ ArraySize;
         return(hashCode);
     }
 }
        /// <summary>
        /// Determines whether the specified Object is equal to the current Object.
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }
            if (Object.ReferenceEquals(this, obj))
            {
                return(true);
            }
            if (this.GetType() != obj.GetType())
            {
                return(false);
            }


            var other = (VLSystemUser)obj;

            //reference types
            if (!Object.Equals(FirstName, other.FirstName))
            {
                return(false);
            }
            if (!Object.Equals(LastName, other.LastName))
            {
                return(false);
            }
            if (!Object.Equals(Email, other.Email))
            {
                return(false);
            }
            if (!Object.Equals(TimeZoneId, other.TimeZoneId))
            {
                return(false);
            }
            if (!Object.Equals(Notes, other.Notes))
            {
                return(false);
            }
            //value types
            if (!UserId.Equals(other.UserId))
            {
                return(false);
            }
            if (!DefaultLanguage.Equals(other.DefaultLanguage))
            {
                return(false);
            }
            if (!IsActive.Equals(other.IsActive))
            {
                return(false);
            }
            if (!IsBuiltIn.Equals(other.IsBuiltIn))
            {
                return(false);
            }
            if (!AttributeFlags.Equals(other.AttributeFlags))
            {
                return(false);
            }
            if (!Role.Equals(other.Role))
            {
                return(false);
            }
            if (!LastActivityDate.Equals(other.LastActivityDate))
            {
                return(false);
            }

            return(true);
        }