/// <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 }