public bool ValueIsEquals(CocoOptionalProperty <T> other)
        {
            if (other == null)
            {
                return(false);
            }

            if (Used == other.Used)
            {
                if (!Used)
                {
                    return(true);
                }

                if (Value == null && other.Value == null)
                {
                    return(true);
                }
                if (Value == null || other.Value == null)
                {
                    return(false);
                }
                return(ValueNonNullIsEquals(other.Value));
            }

            return(false);
        }
        public static bool ValueIsEquals(CocoOptionalProperty <T> p1, CocoOptionalProperty <T> p2)
        {
            if (p1 == null)
            {
                return(p2 == null);
            }

            return(p1.ValueIsEquals(p2));
        }