2016-06-20 47 views
0

我想使用自定義比較器對C#列表進行排序。 我有TreeNodes列表,我想使用子節點數 (TreeNode.GetNodeCount(true))對它們進行排序,但節點數爲< = 2的節點應該放在末尾。 使用下面的代碼,它有時可以工作,但有時我會得到異常,比較器是錯誤的,因爲比較器輸出是錯誤的。C#IComparer使用不同條件的子計數的自定義排序列表

我當前的代碼是:

public class XPathComparer : IComparer<TreeNode> 
{ 
    public int Compare(TreeNode x, TreeNode y) 
    { 
     if ( 
      (x != null && x.GetNodeCount(true) <= 2) || 
      (y != null && y.GetNodeCount(true) <= 2) 
      ) 
      return -1; 
     return x.GetNodeCount(true).CompareTo(y.GetNodeCount(true)); 
    } 
} 

回答

0

你們雖然沒有提供任何調用堆棧或例外,我懷疑你的Arg_BogusIComparerArgumentException

<data name="Arg_BogusIComparer" xml:space="preserve"> 
    <value>Unable to sort because the IComparer.Compare() method returns inconsistent results. Either a value does not compare equal to itself, or one value repeatedly compared to another value yields different results. IComparer: '{0}'.</value> 
</data> 

,拋出此異常當你的比較器不提供一致的結果的元素。在你的例子中,x小於yy小於x在同一時間,如果他們都有1個孩子。