cref - remarks c#
Verificar si todos los artÃculos son iguales en una lista (4)
Creé un método de extensión simple principalmente para la legibilidad que funciona en cualquier IEnumerable.
if (items.AreAllSame()) ...
Y la implementación del método:
/// <summary>
/// Checks whether all items in the enumerable are same (Uses <see cref="object.Equals(object)" /> to check for equality)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="enumerable">The enumerable.</param>
/// <returns>
/// Returns true if there is 0 or 1 item in the enumerable or if all items in the enumerable are same (equal to
/// each other) otherwise false.
/// </returns>
public static bool AreAllSame<T>(this IEnumerable<T> enumerable)
{
if (enumerable == null) throw new ArgumentNullException(nameof(enumerable));
using (var enumerator = enumerable.GetEnumerator())
{
var toCompare = default(T);
if (enumerator.MoveNext())
{
toCompare = enumerator.Current;
}
while (enumerator.MoveNext())
{
if (toCompare != null && !toCompare.Equals(enumerator.Current))
{
return false;
}
}
}
return true;
}
Tengo elementos List (Of DateTime). ¿Cómo puedo verificar si todos los elementos son iguales con una consulta LINQ? En cualquier momento dado, podría haber 1, 2, 20, 50 o 100 elementos en la lista.
Gracias
Esta es una opción, también:
if (list.TrueForAll(i => i.Equals(list.FirstOrDefault())))
Es más rápido que if (list.Distinct().Skip(1).Any())
, y funciona de forma similar como if (list.Any(o => o != list[0]))
, sin embargo, la diferencia es no significativo, entonces sugiero usar el más legible.
Me gusta esto:
if (list.Distinct().Skip(1).Any())
O
if (list.Any(o => o != list[0]))
(que es probablemente más rápido)
Versión VB.NET:
If list.Distinct().Skip(1).Any() Then
O
If list.Any(Function(d) d <> list(0)) Then