tenía curiosidad para ver cómo se implementó el método SingleOrFallback
en MoreLinq y descubrí algo que no había visto antes:C#: IEnumerator <T> en una instrucción using
public static T SingleOrFallback<T>(this IEnumerable<T> source, Func<T> fallback)
{
source.ThrowIfNull("source");
fallback.ThrowIfNull("fallback");
using (IEnumerator<T> iterator = source.GetEnumerator())
{
if (!iterator.MoveNext())
{
return fallback();
}
T first = iterator.Current;
if (iterator.MoveNext())
{
throw new InvalidOperationException();
}
return first;
}
}
¿Por qué es el IEnumerator<T>
en un comunicado using
? ¿Es esto algo que debería pensarse cuando se usa el foreach
en un IEnumerable<T>
también?
Pregunta al lado: ¿Qué hace este método exactamente? ¿Devuelve el elemento de reserva siempre que la secuencia fuente no contenga exactamente un elemento?
Jeje, sí. Se agregó a nuestro proyecto debido a los métodos MaxBy y MinBy. Y al agregar algo así, siempre debe verificar si hay algo más que pueda usar;) – Svish
No estoy seguro de qué es útil este método SingleOrFallback ... ¿podría explicar para qué lo usa? Comprenda qué es lo que hace ahora, pero no cuándo usaría dicho método: p – Svish
Claro: suponga que tiene una búsqueda que debe devolver un solo resultado, si corresponde. Desea tener algún tipo de valor predeterminado para si no devuelve nada, pero muere si hay más de un resultado (ya que eso indica un error). Básicamente es SingleOrDefault pero con un valor predeterminado especificado como una función que no se llamará a menos que sea necesario. –