2009-07-24 24 views

Répondre

6

Bien sûr. Créez simplement le comparateur approprié qui effectue la conversion.

public class StringAsIntComparer : IComparer { 
    public int Compare(object l, object r) { 
    int left = Int32.Parse((string)l); 
    int right = Int32.Parse((string)r); 
    return left.CompareTo(right); 
} 
+0

Voilà ce que j'étais sur le point de répondre! –

7

S'il s'agit de toutes les chaînes, pourquoi utilisez-vous un ArrayList? Si vous êtes sur .Net 2.0 ou plus tard, List<string> est un beaucoup mieux meilleur choix.

Si vous êtes sur .Net 3.5 ou version ultérieure:

var result = MyList.OrderBy(o => int.Parse(o.ToString())).ToList(); 
1

Une légère variation basée sur la solution de Joel

string[] strNums = {"111","32","33","545","1","" ,"23",null}; 
    var nums = strNums.Where(s => 
     { 
     int result; 
     return !string.IsNullOrEmpty(s) && int.TryParse(s,out result); 
     } 
    ) 
    .Select(s => int.Parse(s)) 
    .OrderBy(n => n); 

    foreach(int num in nums) 
    { 
     Console.WriteLine(num); 
    }