Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

207
Vistas
¿Por qué es mejor usar una función local en lugar de simplemente insertar el código?

He encontrado este código aquí :

 public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey>? comparer) { if (source == null) throw new ArgumentNullException(nameof(source)); if (keySelector == null) throw new ArgumentNullException(nameof(keySelector)); return _(); IEnumerable<TSource> _() { var knownKeys = new HashSet<TKey>(comparer); foreach (var element in source) { if (knownKeys.Add(keySelector(element))) yield return element; } } }

Al principio no entendí esta parte return _(); IEnumerable<TSource> _() , pero me di cuenta de que es una función local llamada y declarada en la misma línea. Se hizo aquí .

Mi pregunta es: ¿hay alguna ventaja sobre simplemente insertar ese código?

 public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey>? comparer) { if (source == null) throw new ArgumentNullException(nameof(source)); if (keySelector == null) throw new ArgumentNullException(nameof(keySelector)); var knownKeys = new HashSet<TKey>(comparer); foreach (var element in source) { if (knownKeys.Add(keySelector(element))) yield return element; } }

Diría que la versión actual es más detallada y tiene más sangría, entonces, ¿cuál es la ventaja? ¿Es solo cuestión de gustos?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

La versión con el método local se lanzará inmediatamente si source o keySelector es nulo, porque no está implementado con un bloque iterador.

La versión "en línea" usa un bloque iterador, por lo que nada del código, incluida la validación, se ejecutará hasta que el código de llamada comience a iterar sobre el IEnumerable<TSource> .

En general, la validación entusiasta hace que sea más fácil detectar y comprender los errores: el seguimiento de la pila es más claro y no hay demora entre "hacer la llamada rota" y "ver la falla".

El mismo enfoque también se puede usar para escribir métodos de devolución de tareas que fallan con entusiasmo: escriba un método de devolución de tareas "regular" que llame a un método local asíncrono después de realizar la validación.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda