IEnumerable是空的?

46 .net linq ienumerable

我知道在大多数情况下它可能无关紧要/影响性能,但我讨厌IEnumerable做到和做的想法.Count().是否有一个IsEmptyNotEmpty或一些功能?(类似于stl empty())

cri*_*ito 76

您需要IEnumerable.Any()扩展方法(.Net Framework 3.5及更高版本).它避免了对元素的计数.

  • 费用并不意味着效率不高. (9认同)
  • 详细说明它最多只能计算1个元素并且非常有效. (6认同)
  • 也许我错过了一些东西,但如果我们有一个IEnumerable <T>而不是IEnumerable,那么接受的响应是有效的,因为Any需要一个约束. (6认同)
  • "......效率很高" - 它的效率取决于实施.如果它是一个惰性评估的枚举(例如,使用yield的方法),那么即使启动枚举也可能是昂贵的. (3认同)

Art*_*iom 16

如果它不是通用的而不是这样的东西

enumeration.Cast<object>().Any();
Run Code Online (Sandbox Code Playgroud)

如果它是通用的,请使用Enumerable的扩展,如前所述


not*_*row 9

无需LINQ,您可以执行以下操作:

bool IsEmpty(IEnumerable en)
{
    foreach(var c in en) { return false; }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

  • 更快的是返回en.GetEnumerator().MoveNext(),这基本上是Any()的实现.你几乎和foreach一样,但是你要承担额外的费用,将第一个值分配给一个你永远不会使用的本地var. (2认同)
  • +2感谢您回答非通用IEnumerables的问题!Resharper建议:!items.Cast <object>().Any(); (2认同)