IEnumerable什么时候不能转成IList?

When can IEnumerable not be converted to IList?

我在我正在从事的项目中找到了这段代码:

IEnumerable<int> foo = iEnumerableIntVariable as IList<int> ?? iEnumerableIntVariable.ToList();

我知道 as returns null if it can't successfully convert,然后 ToList() 会开始完成这项工作,但在什么情况下会发生这种情况?

除其他外,考虑这个简单的案例:

public IEnumerable<int> GetListOfNumbers()
{
    for (int i = 0; i < 100; i++)
        yield return i;
}

这 returns 一个真正的 IEnumerable 也不会实现 IList (MSDN)。显然,此 "collection" 中的 adding/removing 没有任何意义,也无法通过索引访问元素。