IEnumerable 合同,我应该检查 GetEnumerator 返回 null 吗?

IEnumerable contract, should I check for GetEnumerator returning null?

假设 GetEnumerator() 总是 return 不为空是否安全?

是的,通常可以安全地假设。如果 GetEnumerator returns null 这可以被认为是实现中的错误。为 foreach 循环生成的 IL 也不执行检查。所以负担在IEnumerable,而不是它的消费者。