【发布时间】:2015-04-01 07:56:01
【问题描述】:
我有一个自定义集合IList<user>作为用户。当我尝试检查users是否为空或为空时,我没有得到任何智能帮助(如IsNullOrEmpty),所以我编写了以下扩展方法
public static bool IsNullOrEmpty<T>(this IEnumerable<T> source)
{
if (source.IsNullOrEmpty())
{
return true;
}
return false;
}
令我惊讶的是,我发现 IEnumberable 有 IsNullOrEmpty()。
据我所知,IList 扩展了ICollection,它再次扩展了IEnumerable,如果是这样,那么IList 应该支持IsNullOrEmpty。
请纠正我的错误。
【问题讨论】:
-
IEnumerable<T>没有IsNullOrEmpty方法,它是您在上面编写的扩展;)如果您调用它,您将得到一个StackOverflowException。 -
@TimSchmelter :D 谢谢
-
附注:
IEnumerable<T>不应该不被认为是可重复的;测试一个序列是否为空的唯一方法是开始迭代它:如果你开始迭代它,它可能会死、完成、消失、完成,再也见不到了 -
@MarcGravell 你能解释一下可重复的意思吗?
-
@Tech repatable === 你可以多次查询数据(得到同样的结果);如果该数据是网络套接字上的开放流,例如:您只能读取一次 - 一旦您读取它:它已经消失了。另一个简单的例子是:我可以写一个
IEnumerable<T>,它产生基于加密种子的随机数:完全不可重复。
标签: c# extension-methods ienumerable ilist isnullorempty