Creo que el IntelliSense es realmente bastante útil, especialmente para los métodos genéricos que toman el tipo Func<..>
como argumento, porque usted puede ver los tipos y tipos que lo guían para comprender lo que el método podría hacer.
Por ejemplo, los argumentos para OrderBy
son IEnumerable<string>
como un argumento 'this', lo que significa que tenemos alguna entrada que contiene un conjunto de cadenas. El primer argumento keySelector
tiene un tipo Func<string, TKey>
, lo que significa que es una expresión lambda que proporciona que especifica cómo obtener TKey
desde string
.
Esto ya sugiere que el método probablemente enumerará todos los elementos (cadenas) de la colección y puede usar el keySelector
para obtener el valor de tipo TKey
de cada elemento de la colección. El nombre TKey
ya sugiere que usará este valor para comparar los elementos (cadenas) usando esta clave calculada. Sin embargo, si observa la otra sobrecarga que toma IComparer<TKey>
, puede estar seguro de esto: este argumento especifica más detalles acerca de cómo desea comparar dos valores de tipo TKey
, por lo que la función debe comparar los elementos utilizando esta clave .
... este tipo de pensamiento sobre los tipos toma algún tiempo para acostumbrarse, pero una vez que lo aprendas, puede ser extremadamente útil. Es más útil en el estilo de "funcional" de código, que a menudo se utiliza una gran cantidad de productos genéricos y expresiones Lamdba en C# 3.0 (y cosas similares en los lenguajes funcionales como F # u otros)
Gracias por esto. ¡Tiene perfecto sentido ahora! :) – dotnetdev
Además, si tuviera que obtener la cadena más corta primero, ¿hay alguna otra manera que decir a => a.Length y luego Invertir en la colección? – dotnetdev
Si desea cambiar los pedidos, consulte OrderBy, OrderByDescending, ThenBy y ThenByDescending. –