2010-08-12 8 views

Respuesta

22

bien, así que si usted no tiene LINQ, podrías difícil que el código:

public int FindMaxAge(List<MyType> list) 
{ 
    if (list.Count == 0) 
    { 
     throw new InvalidOperationException("Empty list"); 
    } 
    int maxAge = int.MinValue; 
    foreach (MyType type in list) 
    { 
     if (type.Age > maxAge) 
     { 
      maxAge = type.Age; 
     } 
    } 
    return maxAge; 
} 

O se podría escribir una versión más general, volver a usar en una gran cantidad de tipos de listas:

public int FindMaxValue<T>(List<T> list, Converter<T, int> projection) 
{ 
    if (list.Count == 0) 
    { 
     throw new InvalidOperationException("Empty list"); 
    } 
    int maxValue = int.MinValue; 
    foreach (T item in list) 
    { 
     int value = projection(item); 
     if (value > maxValue) 
     { 
      maxValue = value; 
     } 
    } 
    return maxValue; 
} 

Usted puede usar esto con:

// C# 2 
int maxAge = FindMax(list, delegate(MyType x) { return x.Age; }); 

// C# 3 
int maxAge = FindMax(list, x => x.Age); 

O puede usar LINQBridge :)

En cada caso, puede devolver el bloque if con una simple llamada al Math.Max si lo desea. Por ejemplo:

foreach (T item in list) 
{ 
    maxValue = Math.Max(maxValue, projection(item)); 
} 
+0

El tipo de delegado podría dar el ejemplo – Shrivallabh

+0

@Shrivallabh: no sé lo que quiere decir, me temo. –

+0

@JonSkeet, creo que necesita un poco de elaboración para el ejemplo de 'delegado'. No pude entender eso también, es por eso que tuve que ir con el segundo método que usaste en el mismo bloque. Lo de FindMax. –

61

suponiendo que tiene acceso a LINQ, y Age es un int (También puede intentar var maxAge - es más probable que compilar):

int maxAge = myTypes.Max(t => t.Age); 

Si también necesita la RandomID (o la totalidad del objeto) , una solución rápida es usar MaxBy de MoreLinq

MyType oldest = myTypes.MaxBy(t => t.Age); 
+0

No, no tiene acceso LINQ .... – Waheed

+0

@Waheed - entonces debe agregarlo a su pregunta. ¿Qué versión estás usando - 2.0 o 3.0? – Kobi

+0

Perdón por eso. Estoy usando 2.0 – Waheed

0

¿Qué hay de esta manera:

List<int> myList = new List<int>(){1, 2, 3, 4}; //or any other type 
myList.Sort(); 
int greatestValue = myList[ myList.Count - 1 ]; 

Es, básicamente, dejar que el método Sort() para hacer el trabajo para usted en vez de escribir su propio método. A menos que no quieras ordenar tu colección.

Cuestiones relacionadas