List 的Sort()方法,傳入Comparison 比較器


首先,看一下 Comparison<T> 的定義:

namespace System
{
    // 摘要:
    //     表示比較同一類型的兩個對象的方法。
    //
    // 參數:
    //   x:
    //     要比較的第一個對象。
    //
    //   y:
    //     要比較的第二個對象。
    //
    // 類型參數:
    //   T:
    //     要比較的對象的類型。
    //
    // 返回結果:
    //     值 條件 小於 0 x 小於 y。0 x 等於 y。大於 0 x 大於 y。
    public delegate int Comparison<T>(T x, T y);
}

 

我們得知這是一個委托,委托的返回類型是int,接着我們可以實現自己的比較方法了.以我在工作中曾寫過的一段關於 C1.Win.C1FlexGrid 控件的 Row 對象比較為例,首先寫出比較的規則:

/// <summary>
/// Row對象的比較器
/// </summary>
/// <param name="row1"></param>
/// <param name="row2"></param>
/// <returns></returns>
private int CompareRow(Row row1, Row row2)
{
    if (row1 == null)
    {
        if (row2 == null)
        {
            return 0;
        }
        else
        {
            return -1;
        }
    }
    else
    {
        if (row2 == null)
        {
            return 1;
        }
        else
        {
            string sTemp1 = row1[4] == null ? "" : row1[4].ToString();
            string sTemp2 = row2[4] == null ? "" : row2[4].ToString();
            if (sTemp1.Length == 0)
            {
                return 1;
            }
            if (sTemp2.Length == 0)
            {
                return -1;
            }
            int retval = String.Compare(sTemp1, sTemp2);
            return retval;
        }
    }
}

注1: row1[4] 獲取的是用戶手動輸入的排序字符串,如1,2,3,4 或 a,b,c,d 等等,也可為空.

注2: 當row1[4]為空時,默認排序靠后.

 

調用處的代碼塊:

// 獲取列表中用戶勾選的所有行
List<Row> rows = GetMuchRows();
 
// 按設定的排列順序進行排序
rows.Sort(CompareRow);


免責聲明!

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



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