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

            return(p1.ValueIsEquals(p2));
        }
        public bool ValueIsEquals(CocoAlternativeProperty <T, U> other)
        {
            if (other == null)
            {
                return(false);
            }

            if (FirstUsed == other.FirstUsed)
            {
                if (FirstUsed)
                {
                    if (First == null && other.First == null)
                    {
                        return(true);
                    }
                    if (First == null || other.First == null)
                    {
                        return(false);
                    }
                    return(FirstNonNullIsEquals(other.First));
                }
                else
                {
                    if (Second == null && other.Second == null)
                    {
                        return(true);
                    }
                    if (Second == null || other.Second == null)
                    {
                        return(false);
                    }
                    return(SecondNonNullIsEquals(other.Second));
                }
            }

            return(false);
        }