在 Reactive Extensions 的 System.Interactive.dll (v1.0.2521.0) 中,EnumerableEx
既有Memoize
方法又有MemoizeAll
方法。两者的 API 文档是相同的:
创建一个枚举原始枚举仅一次并缓存其结果的枚举。
然而,这些方法显然不相同。如果我使用Memoize
,我的 enumerable 在我第一次枚举它时具有值,而第二次似乎是空的。如果我使用MemoizeAll
,那么我会从任何一种方法的描述中得到我期望的行为——我可以根据需要多次枚举结果,并且每次都得到相同的结果,但源只枚举一次。
谁能告诉我这些方法之间的预期区别是什么?用例是Memoize
什么?这似乎是一个相当无用的方法,文档非常混乱。