2016-06-20 12 views
0

Ich möchte C# -Liste mit benutzerdefinierten Vergleich sortieren. Ich habe eine Liste der TreeNodes und möchte sie mit der Anzahl der untergeordneten Knoten (TreeNode.GetNodeCount (true)) sortieren, aber Knoten mit < = 2 Knoten zählen sollte am Ende gesetzt werden. Mit Code unten funktioniert es manchmal, aber manchmal bekomme ich die Ausnahme, dass der Vergleich falsch ist, weil die Vergleichsausgabe falsch ist.C# IComparer benutzerdefinierte Sortierliste mit Child Count mit unterschiedlicher Bedingung

Mein aktueller Code ist:

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)); 
    } 
} 

Antwort

0

Auch wenn Sie nicht entweder den Call-Stack oder die Ausnahme zur Verfügung gestellt haben, vermute ich, dass Sie die Arg_BogusIComparerArgumentException erhalten:

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

Diese Ausnahme wird ausgelöst, wenn Ihr Vergleicher kein konsistentes Ergebnis für ein Element liefert. In Ihrem Beispiel ist x weniger als y und y ist weniger als x zur gleichen Zeit, wenn sie beide 1 Kind haben.