首页 > 解决方案 > 检查 IEnumerable填满了不计入的可选词

问题描述

我正在尝试创建扩展 isEmpty 方法,该方法将检查我的 IEnumerable 是否包含至少一个元素。返回真/假。我还希望能够从检查中排除一些特定项目,因此应该是这样的:

第一次检查:如果list项目数 == 0 则返回 true

第二次检查:如果不list为空(计数> 0),则检查那里有哪些元素。例如,如果我在我想要的参数listSpecialItems中说:string.empty,“whatever”,“dd”,那么如果list只包含那些项目,它仍然应该返回 true。手段listSpecialItems将项目定义为不存在(不计数)。

到目前为止,这是我所做的,但是目前它只检查项目计数。

public static bool IsEmpty<T>(this IEnumerable<T> list, IEnumerable<T> listSpecialItems)
{
     if (list is ICollection<T>) return ((ICollection<T>)list).Count == 0;
         return !list.Any();
}

标签: c#

解决方案


您可以使用Enumerable.Alland Contains,不需要Count或强制转换:

public static bool IsEmpty<T>(this IEnumerable<T> list, IEnumerable<T> treatAsEmpty = null)
{
    if (treatAsEmpty == null) treatAsEmpty = Enumerable.Empty<T>();
    return list.All(treatAsEmpty.Contains);
}

这可以正确处理这些边缘情况:

  • 一个空列表:返回true
  • treatAsEmptyfalse如果列表不为空,则返回

推荐阅读