检查列表中的所有项目是否相同
我有一个列表(date时间)项目。 如何检查所有项目是否与LINQ查询相同? 在任何时候,列表中可能有1个,2个,20个,50个或100个项目。
谢谢
喜欢这个:
if (list.Distinct().Skip(1).Any())
要么
if (list.Any(o => o != list[0]))
(这可能更快)
我创build了简单的扩展方法,主要是为了在任何IEnumerable上工作的可读性。
if (items.AreAllSame()) ...
和方法实现:
/// <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; }
VB.NET版本:
If list.Distinct().Skip(1).Any() Then
要么
If list.Any(Function(d) d <> list(0)) Then