数组元素IComparer,IComparable接口的实现

using System;

using System.Collections;

namespace MyPractise.MyArray.ReachSort

{

class Program

{

static void Main(string [] args)

{

ArrayItem firstArrayItem = new ArrayItem ();

ArrayItem secondArrayItem = new ArrayItem ();

firstArrayItem.FirstItem = "xxx" ;

firstArrayItem.SecondItem = "yyy" ;

secondArrayItem.FirstItem = "yyyy" ;

secondArrayItem.SecondItem = "xxxx" ;

ArrayItem [] myArray = new ArrayItem [2];

myArray[0] = firstArrayItem;

myArray[1] = secondArrayItem;

//Set an array instance item so that Sort() can recognize the compare type.

//Compare() is the current item compare type.

Array .Sort(myArray, new ArrayItem (ArrayItem .CompareType .SecondItem));

Console .WriteLine("First Sort..." );

foreach (ArrayItem arrayItem in myArray)

{

Console .WriteLine("FirstItem:{0},SecondItem:{1}" ,arrayItem.FirstItem,arrayItem.SecondItem);

}

//CompareTo() is the current item compare type.

Array .Sort(myArray);

Console .WriteLine("Sort Again..." );

foreach (ArrayItem arrayItem in myArray)

{

Console .WriteLine("FirstItem:{0},SecondItem:{1}" , arrayItem.FirstItem, arrayItem.SecondItem);

}

Console .ReadKey();

}

}

//Assert the interface IComparer

class ArrayItem : IComparer ,IComparable

{

public enum CompareType

{

FirstItem,

SecondItem

}

public string FirstItem { get ; set ; }

public string SecondItem { get ; set ; }

public CompareType CurrentCompareType { get ; set ; }

public ArrayItem(CompareType currentCompareType)

{

this .CurrentCompareType = currentCompareType;

}

public ArrayItem()

{

this .CurrentCompareType = CompareType .FirstItem;

}

//Assert the method of Interface IComparer

public int Compare(object x, object y)

{

ArrayItem firstCompareItem = (ArrayItem )x;

ArrayItem secondCompareItem=(ArrayItem )y;

switch (CurrentCompareType)

{

case CompareType .FirstItem:

return firstCompareItem.FirstItem.CompareTo(secondCompareItem.FirstItem);

case CompareType .SecondItem:

return firstCompareItem.SecondItem.CompareTo(secondCompareItem.SecondItem);

default :

throw new ArgumentException ("Unexpected compare type, please have a double check for your array item." );

}

}

//Assert the method of Interface IComparable

public int CompareTo(object obj)

{

ArrayItem compareItemInstance = (ArrayItem )obj;

return FirstItem.CompareTo(compareItemInstance.FirstItem);

}

}

}

你可能感兴趣的:(comparable)