一個分頁類PageResult 包括重寫equals


 /// <summary>
    /// 表示包含了分頁信息的集合類型。
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class PagedResult<T> : IEnumerable<T>, ICollection<T>
    {
        #region Public Fields
        /// <summary>
        /// 獲取一個當前類型的空值。
        /// </summary>
        public static readonly PagedResult<T> Empty = new PagedResult<T>(0, 0, 0, 0, null);
        #endregion

        #region Ctor
        /// <summary>
        /// 初始化一個新的<c>PagedResult{T}</c>類型的實例。
        /// </summary>
        public PagedResult()
        {
            Data = new List<T>();
        }
        /// <summary>
        /// 初始化一個新的<c>PagedResult{T}</c>類型的實例。
        /// </summary>
        /// <param name="totalRecords">總記錄數。</param>
        /// <param name="totalPages">頁數。</param>
        /// <param name="pageSize">頁面大小。</param>
        /// <param name="pageNumber">頁碼。</param>
        /// <param name="data">當前頁面的數據。</param>
        public PagedResult(int totalRecords, int totalPages, int pageSize, int pageNumber, List<T> data)
        {
            this.TotalPages = totalPages;
            this.TotalRecords = totalRecords;
            this.PageSize = pageSize;
            this.PageNumber = pageNumber;
            this.Data = data;
        }
        #endregion

        #region Public Properties
        /// <summary>
        /// 獲取或設置總記錄數。
        /// </summary>
        public int TotalRecords { get; set; }
        /// <summary>
        /// 獲取或設置頁數。
        /// </summary>
        public int TotalPages { get; set; }
        /// <summary>
        /// 獲取或設置頁面大小。
        /// </summary>
        public int PageSize { get; set; }
        /// <summary>
        /// 獲取或設置頁碼。
        /// </summary>
        public int PageNumber { get; set; }
        /// <summary>
        /// 獲取或設置當前頁面的數據。
        /// </summary>
        public List<T> Data { get; set; }
        #endregion

        #region Public Methods
        /// <summary>
        /// 確定指定的Object是否等於當前的Object。
        /// </summary>
        /// <param name="obj">要與當前對象進行比較的對象。</param>
        /// <returns>如果指定的Object與當前Object相等,則返回true,否則返回false。</returns>
        /// <remarks>有關此函數的更多信息,請參見:http://msdn.microsoft.com/zh-cn/library/system.object.equals/// </remarks>
        public override bool Equals(object obj)
        {
            if (ReferenceEquals(this, obj))
                return true;
            if (obj == (object)null)
                return false;
            var other = obj as PagedResult<T>;
            if (other == (object)null)
                return false;
            return this.TotalPages == other.TotalPages &&
                this.TotalRecords == other.TotalRecords &&
                this.PageNumber == other.PageNumber &&
                this.PageSize == other.PageSize &&
                this.Data == other.Data;
        }

        /// <summary>
        /// 用作特定類型的哈希函數。
        /// </summary>
        /// <returns>當前Object的哈希代碼。</returns>
        /// <remarks>有關此函數的更多信息,請參見:http://msdn.microsoft.com/zh-cn/library/system.object.gethashcode/// </remarks>
        public override int GetHashCode()
        {
            return this.TotalPages.GetHashCode() ^
                this.TotalRecords.GetHashCode() ^
                this.PageNumber.GetHashCode() ^
                this.PageSize.GetHashCode();
        }

        /// <summary>
        /// 確定兩個對象是否相等。
        /// </summary>
        /// <param name="a">待確定的第一個對象。</param>
        /// <param name="b">待確定的另一個對象。</param>
        /// <returns>如果兩者相等,則返回true,否則返回false。</returns>
        public static bool operator ==(PagedResult<T> a, PagedResult<T> b)
        {
            if (ReferenceEquals(a, b))
                return true;
            if ((object)a == null || (object)b == null)
                return false;
            return a.Equals(b);
        }

        /// <summary>
        /// 確定兩個對象是否不相等。
        /// </summary>
        /// <param name="a">待確定的第一個對象。</param>
        /// <param name="b">待確定的另一個對象。</param>
        /// <returns>如果兩者不相等,則返回true,否則返回false。</returns>
        public static bool operator !=(PagedResult<T> a, PagedResult<T> b)
        {
            return !(a == b);
        }
        #endregion

        #region IEnumerable<T> Members
        /// <summary>
        /// 返回一個循環訪問集合的枚舉數。
        /// </summary>
        /// <returns>一個可用於循環訪問集合的 IEnumerator 對象。</returns>
        public IEnumerator<T> GetEnumerator()
        {
            return Data.GetEnumerator();
        }

        #endregion

        #region IEnumerable Members
        /// <summary>
        /// 返回一個循環訪問集合的枚舉數。 (繼承自 IEnumerable。)
        /// </summary>
        /// <returns>一個可用於循環訪問集合的 IEnumerator 對象。</returns>
        IEnumerator IEnumerable.GetEnumerator()
        {
            return Data.GetEnumerator();
        }

        #endregion

        #region ICollection<T> Members
        /// <summary>
        /// 將某項添加到 ICollection{T} 中。
        /// </summary>
        /// <param name="item">要添加到 ICollection{T} 的對象。</param>
        public void Add(T item)
        {
            Data.Add(item);
        }

        /// <summary>
        /// 從 ICollection{T} 中移除所有項。
        /// </summary>
        public void Clear()
        {
            Data.Clear();
        }

        /// <summary>
        /// 確定 ICollection{T} 是否包含特定值。
        /// </summary>
        /// <param name="item">要在 ICollection{T} 中定位的對象。</param>
        /// <returns>如果在 ICollection{T} 中找到 item,則為 true;否則為 false。</returns>
        public bool Contains(T item)
        {
            return Data.Contains(item);
        }

        /// <summary>
        /// 從特定的 Array 索引開始,將 ICollection{T} 的元素復制到一個 Array 中。
        /// </summary>
        /// <param name="array">作為從 ICollection{T} 復制的元素的目標的一維 Array。 Array 必須具有從零開始的索引。</param>
        /// <param name="arrayIndex">array 中從零開始的索引,從此索引處開始進行復制。</param>
        public void CopyTo(T[] array, int arrayIndex)
        {
            Data.CopyTo(array, arrayIndex);
        }

        /// <summary>
        /// 獲取 ICollection{T} 中包含的元素數。
        /// </summary>
        public int Count
        {
            get { return Data.Count; }
        }

        /// <summary>
        /// 獲取一個值,該值指示 ICollection{T} 是否為只讀。
        /// </summary>
        public bool IsReadOnly
        {
            get { return false; }
        }

        /// <summary>
        /// 從 ICollection{T} 中移除特定對象的第一個匹配項。
        /// </summary>
        /// <param name="item">要從 ICollection{T} 中移除的對象。</param>
        /// <returns>如果已從 ICollection{T} 中成功移除 item,則為 true;否則為 false。 如果在原始 ICollection{T} 中沒有找到 item,該方法也會返回 false。 </returns>
        public bool Remove(T item)
        {
            return Data.Remove(item);
        }

        #endregion
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM