2009-12-01 15 views
5

¿Puede alguien ayudarme a desmontar los elementos aquí y ayudarme a entender cuáles son?OrderByDescending() por MSDN, ¿qué diablos significa esto?

public static IOrderedEnumerable<TSource> OrderByDescending<TSource, TKey>(
    this IEnumerable<TSource> source, 
    Func<TSource, TKey> keySelector 
) 

¿Qué es TSource and TKey? ¿Qué es un KeySelector? ¿Qué diablos es un IOrderedEnumerable?

¿Qué hace Func <> do ??

¿Por qué MSDN es tan críptico?

+1

¿Ya no has publicado una pregunta increíblemente similar? http://stackoverflow.com/questions/1827209/how-did-you-learn-master-c-linq-to-sql – Brandon

+1

No, pero mientras escribía esa pregunta decidí pedirle a esta para obtener detalles sobre esta cosa , esa otra pregunta era sobre aprender LINQ to SQL, esta es sobre este bloque específico de código. – BigOmega

+1

Supongo que deberías aprender clases genéricas y expresiones lambda. MSDN ya no parecerá críptico. –

Respuesta

11

descomponen

  • TSource: Este es el tipo de elementos de la colección que necesitan ser ordenados
  • TKey: La clave de tipo por el cual se ordenan los elementos.
  • Func<TSource,TKey>: Delegado que devolverá una clave para un elemento dado en la colección

Esta función es esencialmente una función de clasificación. Como tal, necesita una forma de comparar los elementos de la colección. Este método particular asume que para un objeto dado hay un valor clave correspondiente por el cual se pueden ordenar.

Tomemos por ejemplo la siguiente clase Student

class Student { 
    string Name { get; set; } 
    ... 
} 

Si quisiera ordenar una colección de Student casos por su nombre lo que podía hacer lo siguiente

IEnumerable<Student> col = GetTheStudents(); 
var ordered = col.OrderByDescending(x => x.Name); 

En este caso, los valores serían como sigue

  • TSource: Student
  • TKey: String
  • Func<TSource,TKey>: Esto se aprobó en la expresión lambda x => x.Name
+0

Gran respuesta, una cosa más: estoy teniendo problemas para entender dónde obtienes x, o está siendo declarada x allí? ¿Por qué el 'igual a nuestro mayor que'? – BigOmega

+0

Del mismo modo, ¿qué pasa si simplemente pone '=' o si pone '= <' (igual o menor que)? – BigOmega

+2

@Ryan, x se declara como parte de la expresión lambda. Una forma más expandida es la siguiente: delegate (cadena x) {return x.Name;} – JaredPar

3

Me pregunto, ¿qué es exactamente claro en MSDN? Aquí está el tema: http://msdn.microsoft.com/en-us/library/bb548916.aspx

Y aquí están algunas respuestas a sus preguntas de ese tema:

parámetros de tipo

TSource - El tipo de los elementos de la fuente.

TKey - El tipo de clave devuelta por keySelector.

Parámetros

fuente - una secuencia de valores a la orden.

keySelector - Una función para extraer una clave de un elemento.

comparer - Un IComparer para comparar claves.

Valor de retorno

Un IOrderedEnumerable cuyos elementos están ordenados en orden descendente de acuerdo a una tecla.

Además, hay comentarios y un ejemplo. Lo que publicaste aquí es solo una firma del método.

+0

bien, tienes razón, solo estaba siendo frustrado, supongo que no es MSDN lo que es críptico para mí es el LINQ :) – BigOmega

+1

I ' d decir que no es solo LINQ. C# ha cambiado mucho de 1.0 a 3.0. Probablemente, será bueno que obtenga un buen libro sobre C# 3.0 y lea sobre genéricos, métodos de extensión, expresiones lambda, delegados y sí, LINQ. En este momento, parece que simplemente no se puede leer la nueva sintaxis de C#. –

Cuestiones relacionadas