从(无限)IEnumerable 中获取 n 个不同项目的简单 LINQ 方式

Easy LINQ-way to take n distinct items from an (infinite) IEnumerable

我有一个类似于生成器的无限 IEnumerable 源,我想从中获取 n 个不同的项目。是否有一种简单的 LINQ 风格的方法(仍然很快)?

如果没有简单的方法,我想出的算法好吗?:

  1. 取n件
  2. 呼叫不同
  3. 调用次数
  4. 如果计数 < n
    1. 取 n - 计数项
    2. 连接这些并转到 2
  5. 结束

只需在 Take 之前调用 Distinct 即可获取 n 个不同的元素:

var nDistincItems = source
    .Distinct()
    .Take(n);