【发布时间】:2018-09-05 06:01:20
【问题描述】:
C# IEnumerable.Count(IEnumerable<TSource>) 和 IEnumerable.Count(IEnumerable<TSource>, Func<TSource,Boolean>) 都返回类型 int 暗示它可以返回小于零的值。这样做没有意义,但如果类型是int,理论上结果可能是负值。
IEnumerable<string> list = GetMyList();
int listCount = list.Count();
// is it more correct to do this:
if(listCount <= 0)
{
DoSomething();
}
else
{
DoSomethingElse();
}
// or this:
if(listCount == 0)
{
DoSomething();
}
else if (listCount > 0)
{
DoSomethingElse();
}
else
{
// but this branch will never be hit
throw new Exception();
}
我在网上找不到任何关于这是否真的会发生的信息,Documentation for Enumerable.Count 没有具体说明它可能发生的任何情况。
只是想知道是否有人对这种情况有任何经验或有关此的任何信息。
谢谢
【问题讨论】:
-
它会返回负数吗?是的。它会返回负数吗? 非常不太可能。
IEnumerable的一些实现可能是有意义的,但我想不出它在哪里有用。也许在一些流式上下文中,比如响应式扩展。 -
您如何将 "Returns the number of elements in a sequence." 的负数解释为除了错误之外的任何内容?
-
发生这种情况的唯一方法是,如果你有实现
ICollection<T>的东西,它的Count属性返回一个负值,因为Enumerable.Count会使用它,如果可以的话。否则,它会尝试迭代IEnumerable并从 0 开始计数项目数。 -
我有时会担心这个。也许需要一个短期的常识课程。