public override int GetHashCode()
        {
            unchecked {
                var hashCode = EqualityComparer <T> .Default.GetHashCode(Value);

                hashCode = (hashCode * 397) ^ (ValueDescriptor?.GetHashCode() ?? 0);
                hashCode = (hashCode * 397) ^ (int)Source;
                hashCode = (hashCode * 397) ^ (SourceDescriptor?.GetHashCode() ?? 0);
                hashCode = (hashCode * 397) ^ (CustomExpression?.GetHashCode() ?? 0);
                return(hashCode);
            }
        }