public override object Clone()
        {
            SQLiteExpression caseOperand = null;

            if (_caseOperand != null)
            {
                caseOperand = (SQLiteExpression)_caseOperand.Clone();
            }
            List <SQLiteCaseItem> caseItems = null;

            if (_caseItems != null)
            {
                caseItems = new List <SQLiteCaseItem>();
                foreach (SQLiteCaseItem ci in _caseItems)
                {
                    caseItems.Add((SQLiteCaseItem)ci.Clone());
                }
            }
            SQLiteExpression caseElse = null;

            if (_caseElse != null)
            {
                caseElse = (SQLiteExpression)_caseElse.Clone();
            }

            SQLiteCaseExpression res = new SQLiteCaseExpression();

            res._caseElse    = caseElse;
            res._caseItems   = caseItems;
            res._caseOperand = caseOperand;
            return(res);
        }
        public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }

            SQLiteCaseExpression dst = obj as SQLiteCaseExpression;

            if (dst == null)
            {
                return(false);
            }

            if (!RefCompare.CompareMany(_caseOperand, dst._caseOperand, _caseElse, dst._caseElse))
            {
                return(false);
            }
            if (!RefCompare.CompareList <SQLiteCaseItem>(_caseItems, dst._caseItems))
            {
                return(false);
            }

            return(base.Equals(obj));
        }