implement the IComparer interface and use Array.Sort method, for example
using System;
using System.IO;
using System.Collections;class TestGetFile : IComparer
{
int m_nSort = 0;
bool m_bAsc = true;
public TestGetFile(int nSort, bool bAsc)
{
m_nSort= nSort;
m_bAsc = bAsc;
} public int Compare(object a,object b)
{
FileInfo fia = (FileInfo)a;
FileInfo fib = (FileInfo)b; switch (m_nSort)
{   case 1://LastWriteTime
return (m_bAsc? 1:-1)*(fia.LastWriteTime - fib.LastWriteTime).Seconds;
  case 2://Length
return (m_bAsc? 1:-1)* (int)(fia.Length - fib.Length);
  default: case 0: //FullName
return (m_bAsc? 1:-1)*String.Compare(fia.FullName , fib.FullName);
} }  
  public static void Main()
  {
DirectoryInfo di = new DirectoryInfo(".");
FileInfo[] fis = di.GetFiles("*.*");
foreach (FileInfo fi in fis)
Console.WriteLine("{0} = {1} = {2}", fi.FullName, fi.LastWriteTime, fi.Length ); Console.ReadLine(); Array.Sort(fis,new TestGetFile(2,false));
foreach (FileInfo fi in fis)
Console.WriteLine("{0} = {1} = {2}", fi.FullName, fi.LastWriteTime, fi.Length ); Console.ReadLine(); Array.Sort(fis,new TestGetFile(1,false));
foreach (FileInfo fi in fis)
Console.WriteLine("{0} = {1} = {2}", fi.FullName, fi.LastWriteTime, fi.Length );
  }
}