对通用列表进行排序,并允许两个名称始终位于顶部并进行休息排序

Mal*_*olm 2 .net c#

private List nodes = new List();

在类型为string的ISilverNodeModel类中有一个标签字段.

假设节点列表是:

Malcolm,Sym,Eri​​c,Sandrea

我希望马尔科姆和桑德雷总是排在最前面并休息以便进行排序.

我这样做但它排序所有:

nodes.Sort((node1,node2)=> node1.Label.CompareTo(node2.Label));

Fre*_*els 5

您可以编写自己的IComparer,并在Sort方法中使用该实现.

然后,您的实施可以确定马尔科姆和桑德拉总是小于任何其他标签.

public class MySorter : IComparer<ISilverNodeModelClass>
{
   public int Compare( ISilverNodeModelClass left, ISilverNodeModelClass right )
   {
       if( left.Label.Equals (right.Label) )
           return 0;

       if( left.Label == "malcolm" || left.Label == "sandra" )
          return Int32.MinValue;

       if( right.Label == "malcolm" || right.Label == "sandra" )
           return Int32.MaxValue;

       return Comparer<string>.Default.Compare (left.Label, right.Label);
   }
}
Run Code Online (Sandbox Code Playgroud)