c# - 检查 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();
}
解决方案
您可以使用Enumerable.All
and 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
- 空
treatAsEmpty
:false
如果列表不为空,则返回
推荐阅读
- angular - 具有材料设计的 Angular 6 动态形状生成器
- sql-server - 使用 QGIS 连接到本地 Microsoft SQL Server Management Studio
- r - R Shiny 应用程序中的外部滤波器
- python-3.x - Python - 如何在 beautifulsoup 中获取内部类文本(TripAdvisor)
- ios - 如何从 UIViewController 移动到 SKView,反之亦然?
- javascript - vue.js - v-on:change 没有在听
- python-3.x - matplotlib 在 Seaborn 下设置小刻度
- java - 世博组通知
- hadoop - 用 Python 将 Parquet 写入 HDFS
- docker - 复制的服务未更新